[英]twisted: Failure vs. Error
我什么時候應該使用twisted.python.failure.Failure
,什么時候應該使用twisted.internet.error.ConnectionDone
? 或者我應該做twisted.python.failure.Failure(twisted.internet.error.ConnectionDone)
,如果是這樣,我應該在什么情況下這樣做呢?
Failure
表示異常和回溯(通常與當前堆棧跟蹤不同)。 在構造異步異常時應該使用Failure
。 因此,當您要使用錯誤觸發Deferred
時,或者當您要調用IProtocol.connectionLost
或ClientFactory.clientConnectionFailed
等方法時。 這是因為在這種情況下,您希望能夠將不同的堆棧跟蹤與當前堆棧跟蹤之外的異常相關聯。
你不應該使用Failure(ConnectionDone)
因為正確的參數的調用Failure
接受一個例外情況,也不例外類。 因此,請使用Failure(ConnectionDone())
。 您還可以使用零參數表單創建新的Failure
: Failure()
。 這僅在存在“當前”異常時才有效,例如在except
語句的套件中。 它使用當前異常及其回溯構造Failure
。
您還可以使用三個參數構建一個Failure
,一個異常類,實例和回溯。 這通常使用sys.exc_info()
的返回值來完成。
如果您只想引發異常,則無需創建Failure
。 只需執行您在Python程序中通常執行的操作即可引發異常: raise SomeException(...)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.