【发布时间】:2012-05-04 16:16:52
【问题描述】:
我想在我自己的类中嵌套一个 Exception 子类,如下所示:
class Foo(object):
def bar(self):
#does something that raises MyException
class MyException(Exception):
pass
这样,当从另一个模块调用 bar() 时,我只需要导入 Foo(而不是 MyException)。但是我下面的内容不起作用:
from foo_module import Foo
foo = Foo()
try:
foo.bar()
except Foo.MyException as e:
print e
Python 给出了这个错误:
类型对象“Foo”没有属性“MyException”
有没有办法做到这一点?
【问题讨论】:
-
您使用的是什么版本的 Python?我刚刚为 Python 2.7.2 启动了 IDLE,定义了一个带有嵌套异常类的类和一个引发嵌套异常的方法,然后尝试了一个 try/except 块,一切正常。
-
你是在做“import foo_module”还是“from foo_module import Foo”?
-
我实际上并没有设置单独的模块并导入它。但我看不出这怎么可能有所作为。
Foo对象有一个属性MyException,或者没有。可以想象,一个嵌套的类块可能由于某种模糊的原因没有成为外部类的属性,但是从另一个模块导入它不会影响它所具有的属性。我怀疑还有其他问题。您能否构建一个 small 测试用例,当您运行它并在此处粘贴两个文件的 full 内容时会出现此错误?
标签: python class scope nested nested-class