4

次のように、自分のクラス内に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」がありません

これを行う方法はありますか?

4

1 に答える 1

8

の内容を考える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

これはまさにあなたが探していたものではありませんか?

何が間違っていたのかわからないので、コードをさらに詳しく調べることをお勧めします。

于 2012-04-24T02:26:52.080 に答える