Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 未捕获TypeError异常_Python_Python 2.x - Fatal编程技术网

Python 未捕获TypeError异常

Python 未捕获TypeError异常,python,python-2.x,Python,Python 2.x,为什么这个TypeError没有被异常捕获 >>> op=None >>> try: ... val = op['one'] ... except KeyError, TypeError: ... val = "one" ... Traceback (most recent call last): File "<stdin>", line 2, in <module> TypeError: 'NoneType' obj

为什么这个
TypeError
没有被异常捕获

>>> op=None
>>> try:
...     val = op['one']
... except KeyError, TypeError:
...     val = "one"
... 
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: 'NoneType' object has no attribute '__getitem__'
>>> 
>>op=None
>>>尝试:
...     val=op['one']
... 除KeyError外,TypeError:
...     val=“一”
... 
回溯(最近一次呼叫最后一次):
文件“”,第2行,在
TypeError:“非类型”对象没有属性“\uuuu getitem\uuuu”
>>> 

您必须将例外情况列表括在括号内:

except (KeyError, TypeError):
    #  ^                   ^
    val = "one"

Python2不允许在同一个
子句中指定多个异常,除非以这种方式指定
子句。您可能希望
创建一个异常元组(这将是有效的,因为),但实际情况并非如此

看看这个,我们有

其中逗号可与
as
互换

换句话说,以下两个除外条款是等效的

except KeyError, e:
    print "We got a key error!"
except KeyError as e:
    print "We got a key error!"
这将捕获一个
键错误
,并将其命名为
e
。因此,在您的代码中,您捕获了一个
KeyError
,并将其命名为
TypeError


为了克服Python语法中的这种模糊性,并指定多个异常(Artyr和Downshift对此的解释值得称赞),必须使用括号强制将其解释为单个表达式(解释为异常的元组),而不是表达式逗号标识符

同样,上述两个表达式是等效的,并将捕获的异常分配给变量
e
。值得注意的是,表单中有一个逗号,使语言语法不那么混乱

"except" [expression ["as" identifier]] ":"

@Krish这绝对是错误的解决方案,所以你能详细说明一下它没有帮助吗?
>>op=None>>>试试看。。。val=op['one']。。。除了(KeyError,TypeError):。。。val=“一”。。。回溯(最近一次调用last):文件“”,第2行,在TypeError中:“NoneType”对象没有属性“\uuu getitem\uuuu'>>>
有趣的是,这个解决方案适合我。你保存了你的文件吗?没有,我正在控制台中尝试,就像我在上面粘贴的一样,mnie是Python 2.7.6当我保存并执行时,它按预期工作,谢谢。但我想知道为什么在控制台中尝试时它不起作用。>对于带有表达式的except子句,将对该表达式求值,如果结果对象与异常“兼容”,则该子句与异常匹配。如果对象是异常对象的类或基类,或者是包含与异常兼容的项的元组,则该对象与异常兼容。但是python2允许多个异常“一个except子句可以将多个异常命名为括号内的元组”
except(RuntimeError、TypeError、NameError):
在语言规范中,逗号允许这样做。你可以在这里测试:@Artyer谢谢你的解释。“我有点失去理智了。”降档,谢谢!虽然,现在我看到了双倍,我又开始觉得有点不对劲了
except (KeyError, TypeError), e:
    pass
except (KeyError, TypeError) as e:
    pass
"except" [expression ["as" identifier]] ":"