如何捕获str异常?

2 投票
4 回答
3020 浏览
提问于 2025-04-15 11:36
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

撰写回答