如何捕获str异常?
import sys
try:
raise "xxx"
except str,e:
print "1",e
except:
print "2",sys.exc_type,sys.exc_value
在上面的代码中,抛出了一个字符串异常,虽然这个异常已经不推荐使用了,但我用的一个第三方库还是在用它。
那么,我该如何捕捉这样的异常,而不依赖于“捕获所有”的方式,因为那样可能会有问题。
为什么 except str,e: 捕获不了这个异常呢?
系统信息:Python 2.5.2 (r252:60911, 2008年7月31日,17:28:52) [GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] 在 linux2 上运行
4 个回答
2
try:
raise "xxx"
except "xxx":
print "xxx caught"
我觉得except <class>
这个用法只适用于那些是Exception
类的子类的情况。顺便提一下,当你检查字符串的类型时,记得用basestring
,这样也能兼容unicode字符串。
6
通用的 except:
语句是捕捉所有字符串异常的唯一方法。
字符串异常是Python中的一个老特性。在新的代码中,你应该使用 raise Exception("xxx")
来抛出异常,或者自己定义一个异常类,或者使用 assert 0, "xxx"
。
4
这里是来自 python 邮件列表 的解决方案,虽然不是特别优雅,但如果实在无法避免这种小技巧,它是可以工作的。
import sys
try:
raise "a string exception"
except:
e, t, tb = sys.exc_info()
if not isinstance(e, str):
raise
print "caught", e