I would like to import bunch of libraries and catch the exception.
If I have only 1 try catch block I get 1 exception (the first one). Is there a pattern to iterate over all of the libs and have a separate exception for each individual missing lib?
#!/usr/bin/env python
try: import sys
except: print sys.exc_info()
try: import numpy as np
except: print sys.exc_info()
try: import scipy as sp
except: print sys.exc_info()
try: import os as os
except: print sys.exc_info()
try: from operator import itemgetter
except: print sys.exc_info()
try: import socket
except: print sys.exc_info()
try: import logging
except: print sys.exc_info()
try: from time import gmtime, strftime
except: print sys.exc_info()
You can use __import__
to dynamically import modules, allowing you to - among other things - import modules by iterating a list with their names.
For example:
libnames = ['numpy', 'scipy', 'operator']
for libname in libnames:
try:
lib = __import__(libname)
except:
print sys.exc_info()
else:
globals()[libname] = lib
You can either extend that to handle the import ... as ...
and from ... import ...
forms or just do the assignments later manually, ie.:
np = numpy
sp = scipy
itemgetter = operator.itemgetter
Though common, the following easy design pattern and its variations are discouraged:
# BAD, hides circular import etc. nested errors
try:
import moolib
except ImportError:
raise ImportError("You must install moolib from http://moo.example.com in order to run this app")
Instead use the Python package manager to check if a libray is available:
# GOOD
import pkg_resources
try:
pkg_resources.get_distribution('plone.dexterity')
except pkg_resources.DistributionNotFound:
HAS_DEXTERITY = False
else:
HAS_DEXTERITY = True
More about the topic can be found here
As the comments above point out, Python standard library modules (stdlib) are always available UNLESS you run Python in an embedded environment with stripped down run-time.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With