Adjusting the names of custom exceptions (since raising strings is deprecated)
Silfheed
silfheed at gmail.com
Tue Aug 21 15:18:00 EDT 2007
On Aug 21, 1:32 am, James Stroud <jstr... at mbi.ucla.edu> wrote:
> 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
It doesnt appear to work for me.
Same exact code as you have but I still get:
>>> raise myModule.ExampleError
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
myModule.ExampleError
More information about the Python-list
mailing list