Search code examples
pythonexceptionsetup.pyegg

Importing Python libraries and gracefully handling if they are not availalble


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()

Solution

  • 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