2015-11-03 29 views
3

我有可能出現只有類FooPython中的內部或外部異常類?

內特定的異常難道是很好用,如下一個內部異常類:

class Foo: 
    class FooError(Exception): 
     pass 

    def bar(self): 
     raise self.FooError('omg') 

或者是更好地把FooErrorFoo外面?

class FooError(Exception): 
    pass 

class Foo: 
    def bar(self): 
     raise FooError('omg') 
+2

如果你把異常置於外面,你可以在代碼的許多地方使用相同的代碼 –

回答

5

由於出口規則,將它放在外面。這個例外只是在類內提出,但它可能(也可能會)冒泡到代碼的其他部分,所以其他模塊可能想要捕獲它。

如果例外是以外的該類,則可以選擇僅導出該異常。如果例外是裏面的類,你必須導出整個類的例外,或者使用類似__all__ = [Foo.FooError, ...]的東西,基本上模仿了一個外部例外。

如果這個例外只是在之內,並且在班級內部抓到了,這可能是有道理的,但我仍然不認爲它是慣用的。