2012-04-24 73 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