2012-04-24 27 views
2

我想窝的异常子类我自己的范围内,像这样:在类中嵌套自定义异常类? (蟒蛇)

class Foo(object): 

    def bar(self): 
     #does something that raises MyException 

    class MyException(Exception): 
     pass 

这样,我只需要导入foo(而不是MyException)调用栏时,()来自另一个模块。但我有下面什么行不通:

from foo_module import Foo 

foo = Foo() 

try: 
    foo.bar() 
except Foo.MyException as e: 
    print e 

Python中给出了这样的错误:

type object 'Foo' has no attribute 'MyException'

有没有办法做到这一点?

+1

您使用的是什么版本的Python?我刚刚启动了Python 2.7.2的IDLE,定义了一个嵌套的异常类和引发嵌套异常的方法,然后尝试了try/except块,并且一切正常。 – Ben 2012-04-24 02:26:06

+0

你是在做“导入foo_module”还是“从foo_module导入Foo”? – 2012-04-24 02:47:30

+0

我实际上没有设置一个单独的模块并导入它。但我不明白这可能会有什么不同。 'Foo'对象有一个属性'MyException',或者它没有。可以想象,嵌套类可能没有成为外部类的一个属性,但是从另一个模块导入将无法影响它的属性。我怀疑还有其他事情出错了。你可以构建一个* small *测试用例,当你运行它并在这里粘贴这两个文件的**完整内容时,会给你这个错误? – Ben 2012-04-24 02:53:21

回答

6

考虑的t.py内容:

class Foo(): 
    def RaiseBar(self): 
    raise Foo.Bar("hi") 
    class Bar(Exception): 
    pass 

而蟒蛇终端上运行此:

>>> import t 
>>> x = t.Foo() 
>>> try: 
...  x.RaiseBar() 
... except t.Foo.Bar as e: 
...  print e 
... 
hi 

这不是正是你要找的东西?

不知道你做错了什么和你的,我建议你更仔细地重新检查代码。

+0

是的,你是对的。我的代码与我提供的示例有点不同。我的错。 :/ – 2012-04-24 06:39:40