Message145848
The documentation of generator.throw() gives this signature:
generator.throw(type[, value[, traceback]])
Looking at the code, it accepts the following arguments:
g.throw(ExcType) --> raise ExcType()
g.throw(ExcType, None) --> raise ExcType()
g.throw(ExcType, None, tb) --> raise ExcType().with_traceback(tb)
g.throw(ExcType, instace_of_ExcType) --> raise instance_of_ExcType
g.throw(ExcType, instace_of_ExcType, tb) --> raise instance_of_ExcType.with_traceback(tb)
g.throw(ExcType, other_value) --> raise ExcType(other_value)
g.throw(ExcType, other_value, tb) --> raise ExcType(other_value).with_traceback(tb)
Up to this point, I think everything is in line with the documentation. But it also accepts the following (now that issue 13188 is fixed):
g.throw(exc_instance) --> raise exc_instance (preserving the traceback of exc_instance)
g.throw(exc_instance, None) --> raise exc_instance (preserving the traceback of exc_instance)
g.throw(exc_instance, None, tb) --> raise exc_instance.with_traceback(tb)
It does not accept these, throwing a TypeError:
g.throw(exc_instance, some_value_other_than_None)
g.throw(exc_instance, some_value_other_than_None, tb)
g.throw(exc_instance, tb)
The documentation is really unclear on throwing existing exception instances with (exc_instance) or (exc_instance, None), and that calling with (type, value) or (type, value, tb) will create a new exception if not isinstance(value, type). |
|
Date |
User |
Action |
Args |
2011-10-18 18:16:43 | petri.lehtinen | set | recipients:
+ petri.lehtinen, ncoghlan, pitrou, ezio.melotti, docs@python |
2011-10-18 18:16:43 | petri.lehtinen | set | messageid: <1318961803.9.0.966531589594.issue13213@psf.upfronthosting.co.za> |
2011-10-18 18:16:43 | petri.lehtinen | link | issue13213 messages |
2011-10-18 18:16:42 | petri.lehtinen | create | |
|