当我在当前的Python环境(ipython notebook cell)中尝试这个简单的例子时,我无法捕获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
当我尝试在同一台计算机上的不同ipython笔记本中运行相同的复制粘贴代码时,我得到了预期的输出:catched expected error
。
我知道它与我当前的环境有关,但我不知道从哪里开始寻找!我还尝试了另一个使用AttributeError的示例,在这种情况下,catch块可以工作。
修改 我试过的时候:
>>> print AttributeError
<type 'exceptions.AttributeError'>
>>> print TypeError
<type 'exceptions.AttributeError'>
我记得在会话的早些时候我犯了一个错误,它重命名为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')
答案 0 :(得分:3)
我认为可能是某些环境必须隐式导入TypeError:
from exceptions import TypeError
放手一搏!
答案 1 :(得分:0)
此行有错误:
except AttributeError, TypeError :
这意味着:捕获AttributeError
类型的异常,并将该异常分配给名称TypeError
。实质上,你这样做了:
except AttributeError as e:
TypeError = e # instance of AttributeError!
您可以使用
解决此问题del TypeError
让Python再次找到内置类型。
更好的解决方案是使用正确的语法:
except (AttributeError, TypeError):
由于这个错误是多么容易,Python 2.6 added the except .. as
syntax以及使用except Exception, name:
的旧语法已经从Python 3中删除了。