AttributeErrors
occur when attempting to use or assign an attribute that is not defined in the current context:
>>> import math >>> print math.notattribute(5) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'module' object has no attribute 'notattribute'
Here, we are trying to refer to an attribute from the imported math
library named notattribute
. That module does not exist in the math
library and is the reason we're getting the error here. Another scenario where we would receive an AttributeError
is trying to refer to a submodule from a library that does not import its own submodules automatically.
The Traceback indicates the file in which the error occurred, in this case, stdin
or standard input, because this code was written in the interactive prompt. When working on larger projects or with a single script, the file will be the name of the error-causing script rather than stdin
. The "in" bit will be the name of the function that contains the faulty line of code or "<module>" if the code is not in a function.
Available attributes can be determined using the dir
built-in function. It is clear that there is no attribute named notattribute
in the math
module. We have the following code:
>>> import math >>> dir(math) ['__doc__', '__file__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trun c']