Adjusting the names of custom exceptions (since raising strings is deprecated)

Silfheed silfheed at gmail.com
Tue Aug 21 21:18:00 CEST 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