ipython笔记本中除块未捕获异常外
当我在当前Python环境(ipython笔记本单元)中尝试此简单示例时,我无法捕获TypeError异常:ipython笔记本中除块未捕获异常外,python,exception-handling,environment,Python,Exception Handling,Environment,当我在当前Python环境(ipython笔记本单元)中尝试此简单示例时,我无法捕获TypeError异常: a = (2,3) try: a[0] = 0 except TypeError: print "catched expected error" except Exception as ex: print type(ex), ex 我得到: <type 'exceptions.TypeError'> 'tuple' object does not support
a = (2,3)
try:
a[0] = 0
except TypeError:
print "catched expected error"
except Exception as ex:
print type(ex), ex
我得到:
<type 'exceptions.TypeError'> 'tuple' object does not support item assignment
我记得在之前的课程中,我犯了一个错误,将TypeError重命名为:
try:
group.apply(np.round, axis=1) #group is a pandas group
except AttributeError, TypeError :
#it should have been except (AttributeError, TypeError)
print ex
这给了我:
('rint', u'occurred at index 54812')
我认为,对于某些环境,可能必须隐式导入TypeError:
from exceptions import TypeError
试试看 此线路在此处出现故障:
except AttributeError, TypeError :
这意味着:捕获类型为AttributeError
的异常,并将该异常分配给名称TypeError
。本质上,你做到了:
except AttributeError as e:
TypeError = e # instance of AttributeError!
您可以用以下方法纠正此问题:
del TypeError
因此Python会再次找到内置类型
更好的解决方案是使用正确的语法:
except (AttributeError, TypeError):
由于犯错误是多么容易,Python2.6和使用
的旧语法(除了Exception,name:
之外)已从Python3中完全删除。谢谢,它可以工作!这提醒我尝试测试我称之为TypeError的实际类(参见编辑)。然后我听从了你的建议,一切正常。这将TypeError
名称重新绑定为全局名称;最好不要首先执行TypeError=AttributeError
,或者使用del-TypeError
进行清理,这样内置名称就不再被屏蔽。
except (AttributeError, TypeError):