Hi,
I today uncovered subtle bug and would like to share it with you.
By a mistake, I forgot to put comma into '__all__' tuple of some module. Notice
missing comma after 'B'.
# module foo.py
__all__ = (
'A',
'B'
'C',
)
class A: pass
class B: pass
class C: pass
If you try to import * from the module, it will raise an error, because 'B' and
'C' will be concatenated into 'BC'.
>>> from foo import *
AttributeError: 'module' object has no attribute 'BC'
The bug won't be found until someone imports *.
In order to identify problems as soon as possible, here's the proposal.
Porposal: allow putting objects into __all__ directly, so possible problems
will be found earlier:
# module foo.py
class A: pass
class B: pass
class C: pass
__all__ = (A, B, C)
Note: this currently don't work.
>>> from foo import *
TypeError: attribute name must be string, not 'type'
--
https://mail.python.org/mailman/listinfo/python-list