On StackOverflow someone asked a whileago whether you can find out what errors a module defines and throws.In Python, a function does not declare that it throws a particularerror object, so you need to look inside the module to see whatexceptions it defines, or what exception it raises. You can do this byreading the docs (RTFM!) but of course they may be out of date, orwhat have you, so an alternative is to use the Python API to do lookfor you.
Which errors does a module define?
To first find which exceptions a module defines, just write a simplescript to go through each object in the module dictionary
module.__dict__ and see if it ends in the word Error or if it is asubclass of
If I run this on the
shutils module from the standard library I get this:
$ python listexn.py shutil Looking for exception types in module: shutil shutil.Error is an exception type shutil.WindowsError is an exception type $
That tells you which errors are defined, but not which ones are thrown. Of course, if the module has errors with funny names, or ones that are not subclasses of
Exception, then this code will miss them.
What errors are thrown by a module?
To find out what errors a module can throw, we need to walk over theabstract syntax tree generated when the Python interpreter parses themodule, and look for every raise statement, then save a list of nameswhich are raised. The code for this is a little long, but pretty straightforward, so first I’ll state the output:
$ python listexn-raised.py /usr/lib/python2.6/shutil.py Looking for exception types in: /usr/lib/python2.6/shutil.py/usr/lib/python2.6/shutil.py: OSError is an exception type /usr/lib/python2.6/shutil.py:Error is an exception type $
So now we know that
shutil.py defines the errors
WindowsError and raises the exception
Error. If wewant to be a bit more complete, we could write another method to checkevery except clause to also see which exceptions
Here’s the code to walk over the AST, it just uses the
compiler.visitor interface to create a walker which implements thevisitor pattern from the Gang of Four book: