On Thu, 31 Dec 2009 12:18:42 -0800, Phlip wrote: > Pythonistas: > > I need to do this: > > try: > deep_arcane_layer() > except e: > e.message = 'the deep arcane layer says: ' + e.message > raise e
Use e.args, not e.message. The message attribute is deprecated from Python 2.6 and will print a warning if you try to use it. > The point is I need to augment that layer's exceptions with extra > information that I know about that layer. > > I naturally cannot use the argless version of 'raise', because it only > re-raises whatever exception object is currently in play - and it > appears to be read-only or locked or something. Changing args works: >>> try: ... 1/0 ... except ZeroDivisionError, e: ... e.args = e.args + ('fe', 'fi', 'fo', 'fum') ... raise ... Traceback (most recent call last): File "<stdin>", line 2, in <module> ZeroDivisionError: ('integer division or modulo by zero', 'fe', 'fi', 'fo', 'fum') > I also should not do this... > > raise Exception('blah ' + e.message) > > ...because that stripped off the exception type itself, and higher > layers need to know this. For the record you can get the exception type from type(e): raise type(e)("whatever you want") but that creates a new exception, not re-raising the old one. -- Steven -- http://mail.python.org/mailman/listinfo/python-list