这两种错误有什么区别?什么时候使用它们中的每一个?
问问题
3769 次
3 回答
7
属性是函数或类或模块的属性,如果找不到属性,则会引发attribute error
.
NameError
与变量有关。
>>> x=2
>>> y=3
>>> z #z is not defined so NameError
Traceback (most recent call last):
File "<pyshell#136>", line 1, in <module>
z
NameError: name 'z' is not defined
>>> def f():pass
>>> f.x=2 #define an attribue of f
>>> f.x
2
>>> f.y #f has no attribute named y
Traceback (most recent call last):
File "<pyshell#141>", line 1, in <module>
f.y
AttributeError: 'function' object has no attribute 'y'
>>> import math #a module
>>> math.sin(90) #sin() is an attribute of math
0.8939966636005579
>>> math.cosx(90) #but cosx() is not an attribute of math
Traceback (most recent call last):
File "<pyshell#145>", line 1, in <module>
math.cosx(90)
AttributeError: 'module' object has no attribute 'cosx'
于 2012-08-12T11:12:52.920 回答
2
从文档中,我认为文本很容易解释。
NameError 在找不到本地或全局名称时引发。这仅适用于非限定名称。关联的值是一条错误消息,其中包含无法找到的名称。
AttributeError 当属性引用(请参阅属性引用)或分配失败时引发。(当对象根本不支持属性引用或属性分配时,会引发 TypeError。)
在上面的示例中,当您尝试访问非限定名称(本地或全局)时,对z
raises的引用NameError
在你的最后一个例子math.cosx
中是一个点访问(属性引用),在这种情况下是数学模块的一个属性,因此AttributeError
被提出。
于 2012-08-12T11:12:04.697 回答
0
如果您尝试访问之前未定义或分配的变量,Python 会提出一个名称。当您尝试访问之前未分配或定义的实例的实例变量时,会引发 AttributeError。
看
于 2012-08-12T11:11:43.017 回答