Adjusting the names of custom exceptions (since raising strings is deprecated)
James Stroud
jstroud at mbi.ucla.edu
Tue Aug 21 04:32:01 EDT 2007
Silfheed wrote:
> Heyas
>
> So this probably highlights my lack of understanding of how naming
> works in python, but I'm currently using FailUnlessRaises in a unit
> test and raising exceptions with a string exception. It's working
> pretty well, except that I get the deprecation warning that raising a
> string exception is going to go away. So my question is, how do I
> mangle the name of my exception class enough that it doesnt stick the
> name of the module before the name of the exception?
>
> Namely I'd like to get the following
>
> ***
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> MyError: 'oops!'
>
> instead of
>
> ***
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> __main__.MyError: 'oops!'
>
> (or even test_thingie.MyError as is usually the case).
>
>
> Creating a class in a separate file and then doing
>
> ***
> from module import MyError
> raise MyError
>
>
> still gives
>
> ***
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> module.MyError
>
>
> Anyway, any help appreciated.
>
Would it be cheating to use metaclasses?
# myModule.py
class ExampleType(type):
def __repr__(cls):
return cls.__name__
class ExampleError(Exception):
__metaclass__ = ExampleType
__name__ = 'ExampleError'
def __repr__(self):
return 'ExampleError'
py> import myModule
py> raise myMo
myModule myModule.py myModule.pyc myModule.py~
py> raise myModule.Ex
myModule.ExampleError myModule.ExampleType
py> raise myModule.ExampleError
------------------------------------------------------------
Traceback (most recent call last):
File "<ipython console>", line 1, in <module>
ExampleError
James
More information about the Python-list
mailing list