确认Python 3.6中异常对象子串检查不可用及替代方案
问题解析与解决方法
原因确认
在Python 3.6及更早版本里,异常对象本身不支持in成员检查操作,直接写"AlreadyExistsException" in e会触发TypeError——因为解释器会尝试迭代这个异常对象,但这类异常实例并没有实现可迭代接口。
而Python 3.7及之后(包括你用的3.8.9)对异常对象的字符串交互做了优化,允许直接用in操作符检查子串是否在异常的字符串表示里,相当于隐式帮你调用了str(e)再做判断。
兼容所有版本的实现方法
有两种可靠的写法:
- 方法一:显式把异常转成字符串后再检查子串,这是最直接的兼容写法:
try: ... except Exception as e: if "AlreadyExistsException" in str(e): # 执行你的处理逻辑
- 方法二:直接捕获特定异常类型,这种方式比字符串匹配更严谨,也从根源上避免版本兼容问题(前提是你能导入对应的异常类):
# 先导入目标异常类,比如如果是AWS SDK的异常就写 from botocore.exceptions import AlreadyExistsException try: ... except AlreadyExistsException as e: # 执行你的处理逻辑
内容的提问来源于stack exchange,提问作者Tristan Tran
相关产品推荐
相关产品推荐

