Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

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

11 views
Skip to first unread message

Silfheed

unread,
Aug 21, 2007, 12:54:45 AM8/21/07
to
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.

James Stroud

unread,
Aug 21, 2007, 4:32:01 AM8/21/07
to

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

Silfheed

unread,
Aug 21, 2007, 3:18:00 PM8/21/07
to

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

Peter Otten

unread,
Aug 21, 2007, 4:53:04 PM8/21/07
to
Silfheed wrote:

James tested his code in the ipython console which obviously uses a
different routine to produce the traceback.

Try

>>> class MyError(Exception):
... __module__ = None
...
>>> raise MyError("oops")


Traceback (most recent call last):
File "<stdin>", line 1, in <module>

MyError: oops

Peter

Silfheed

unread,
Aug 21, 2007, 6:16:42 PM8/21/07
to

Ah ha! Thanks, that worked great!

0 new messages