簡體   English   中英

如何捕獲str異常?

[英]How to catch str exception?

import sys
try:
    raise "xxx"
except str,e:
    print "1",e
except:
    print "2",sys.exc_type,sys.exc_value

在上面的代碼中引發了一個字符串異常雖然已經棄用,但我使用的第三方庫仍然使用它。 那么如何在不依賴於全部捕獲的情況下捕獲這樣的異常,這可能是壞事。

除了str,e:沒有抓住它? 為什么?

系統:Python 2.5.2(r252:60911,2008年7月31日,17:28:52)[gCC 4.2.3(Ubuntu 4.2.3-2ubuntu7)] on linux2

通用except:子句是捕獲所有str異常的唯一方法。

str例外是遺留的Python功能。 在新代碼中,您應該使用raise Exception("xxx")或引發您自己的Exception子類,或者assert 0, "xxx"

這是來自python郵件列表的解決方案,不是很優雅,但如果無法避免需要這樣的黑客將工作

import sys
try:
     raise "a string exception"
except:
     e, t, tb = sys.exc_info()
     if not isinstance(e, str):
          raise    
     print "caught", e
try:
    raise "xxx"

except "xxx":
    print "xxx caught"

except <class>只適用於我認為是Exception的子類的類。 哦順便說一句,在檢查字符串類型時使用basestring ,也可以使用unicode字符串。

提高原始字符串是錯誤的。 這是一個不推薦使用的功能(因此應該引發警告)。 如果您真的需要它,捕獲顯式字符串將起作用,因此將捕獲所有內容。 由於抓住一切把丑陋的代碼 ,我建議明確醒目的字符串,甚至更好:修復已損壞的庫。

try:
    #code_that_throws_string()
    raise("spam")
except "spam":
    pass

將通過聲明。 有許多充分的理由不使用字符串作為例外,這是其中之一(另一個是:我不相信你可以獲得追溯,因此它們對於修復錯誤很大程度上是無用的)。

所以,修好圖書館(好)。 或者明確地捕獲字符串(壞)。 或者抓住一切(非常糟糕)並做一些isinstance(e,str)檢查(甚至更糟)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM