To improve the debugging experience in both interactive and non-interactive code, I propose to offer suggestions when attribute access fails. For example:
>>> class A: foo = None
...
>>> A.fou
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'A' has no attribute 'fou'
Did you mean: foo?
This also applies to imports from modules and other situations:
>>> import collections
>>> collections.NamedTuple
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'collections' has no attribute 'NamedTuple'
Did you mean: namedtuple? |