ipython notebook 中的块除外未捕获异常
Except block not catching exception in ipython notebook
当我在当前 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
当我尝试在同一台计算机上的不同 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')
我认为可能是某些环境必须隐式导入 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):
由于该错误很容易犯,Python 2.6 added the except .. as
syntax,并且使用 except Exception, name:
的旧语法已从 Python 3 中删除一共
当我在当前 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
当我尝试在同一台计算机上的不同 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')
我认为可能是某些环境必须隐式导入 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):
由于该错误很容易犯,Python 2.6 added the except .. as
syntax,并且使用 except Exception, name:
的旧语法已从 Python 3 中删除一共