[英]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.