raise takes 3 arguments: http://www.python.org/doc/current/ref/raise.html#raise
More precisely, it takes anywhere from zero to three arguments:
raise: reraise last exception
raise typ_or_val: a string, a type of exception to raise, or an instance of an exception
raise typ,val: assuming isinstance(excvalue,exctype), raises excvalue
raise typ,val,tb: like the two argument form, but with an explicit traceback, that changes what will be shown as the stack trace. This form is mainly used when error handling code saves one error, and wants to be able to revert to handling that error later even though it may handle other errors in the interim.
Anyway, the specific code in question should just use zero-argument raise, unless there's some reason that clients of ClassLoader want all exceptions to be transformed into ImportError, in which case the correct form would be this rather ugly three-argument form:
raise ImportError, ImportError(sys.exc_info()[1]), sys.exc_info()[2]
This is basically wrapping the original exception instance (exc_info()[1]) in an ImportError, and reusing the traceback. I'm using sys.exc_info() instead of sys.exc_value and exc_traceback because those variables are not threadsafe nor frame-specific, as exc_info() is. (See http://www.python.org/doc/current/lib/module-sys.html for details.)
Anyway, either the zero argument or three argument form is needed in order to address John's issue; the one or two argument forms won't work.
On Feb 17, 2005, at 5:46 PM, Andi Vajda wrote:
The reason I changed this is because it was incorrect python before. The raise statement takes only two arguments, an exception class and one value or tuple of values.
http://www.python.org/doc/current/lib/module-exceptions.html#l2h-280
Andi..
On Thu, 17 Feb 2005, John Anderson wrote:
Hi Morgen:
I just ran into the same problem you did, where a syntax error in parcel loading didn't send me off the the right place when debugging under Wing.
I'm not sure I completely understand it yet, however, it looks like Andi's recent change in ClassLoader.py
raise ImportError, sys.exc_value, sys.exc_traceback
to
raise ImportError, (sys.exc_value, sys.exc_traceback)
is the cause.
John_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "Dev" mailing list http://lists.osafoundation.org/mailman/listinfo/dev
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "Dev" mailing list http://lists.osafoundation.org/mailman/listinfo/dev
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "Dev" mailing list http://lists.osafoundation.org/mailman/listinfo/dev
