【问题标题】:Nest custom exception class within class? (Python) [closed]在类中嵌套自定义异常类? (Python)[关闭]
【发布时间】: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


【解决方案1】:

鉴于t.py的内容:

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

并在 python 终端上运行:

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

这不正是您要找的吗?

不确定你做错了什么,我建议你更仔细地重新检查代码。

【讨论】:

  • 是的,你是对的。我的代码与我提供的示例有点不同。我的错。 ://
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
相关资源
最近更新 更多