ipython笔记本中除块未捕获异常外

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

当我在当前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 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):