Another form of dynamic import
kay.schluehr at gmx.net
Wed Mar 25 17:13:44 CET 2009
On 25 Mrz., 15:23, Marco Nawijn <naw... at gmail.com> wrote:
> In short I would like to know if somebody knows if it is possible to
> re-execute a statement that raised an exception? I will explain the
> reason by providing a small introduction on why this might be nice in
> my case
> and some example code.
> I am using the python bindings to a *very* large C++ library. About
> 5000 classes divided over approx. 450 different
> packages are exposed through the Python interface. To reduce the
> number of import statements that need to be inserted and to limit the
> number of wildcard imports it would be very helpful if class names
> could be automatically imported from the proper module. There is no
> problem in finding out the proper module given a (valid) class name.
> As an example, look at the following statement
> >> aPoint = gp_Pnt(1.0, 0.0, 0.0) # Oops, this will raise a NameError, since
> # gp_Pnt class
> is unknown
> NameError: name 'gp_Pnt' is not defined
> As indicated, this will raise a NameError exception. What I would like
> to do is something like the following (pseudo-code):
> aPoint = gp_Pnt(1.0, 0.0, 0.0) 
> except NameError, e:
> name = e.args.split
> if isValid(name):
> ===> Can I go back to statement  from this point?
> raise e
> There is no problem in catching the exception, finding out which name
> is unknown to python and check if this is a valid name for my library.
> My question is, is there any possibility of going back to the
> statement that raised the error, re-execute the statement and
> Thanks for any thoughts and suggestions.
There is no call/cc continuation in Python when you are asking for
such a thing.
I wonder however why you don't try lazy attribute access? Instead of
making a raw function call like that to gp_Pnt, one can thread all
calls to the C++ system through an object that implements __getattr__
and loads new names incrementally if one is missing.
More information about the Python-list