New submission from Jason R. Coombs <jar...@jaraco.com>: In Python 3.6, one could find doctests on a namespace package:
``` $ mkdir foo $ python3.6 Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import foo >>> foo.__file__ Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: module 'foo' has no attribute '__file__' >>> import doctest >>> doctest.DocTestFinder().find(foo) [] ``` In recent builds of Python 3.7, these namespace packages inherited a `__file__` attribute whose value is `None`, which causes DocTestFinder.find to fail: ``` $ python Python 3.7.0b2 (tags/v3.7.0b2:b0ef5c979b, Feb 27 2018, 20:38:21) [Clang 6.0 (clang-600.0.57)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import doctest >>> import foo >>> foo.__file__ >>> doctest.DocTestFinder().find(foo) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/doctest.py", line 893, in find file = inspect.getsourcefile(obj) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/inspect.py", line 687, in getsourcefile if any(filename.endswith(s) for s in all_bytecode_suffixes): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/inspect.py", line 687, in <genexpr> if any(filename.endswith(s) for s in all_bytecode_suffixes): AttributeError: 'NoneType' object has no attribute 'endswith' ``` Scanning through the recent changes, issue32305 seems to be related, but when I look at the code ancestry, I can't see the related commits on the 3.7 branch, so I couldn't immediately confirm if it is indeed implicated. I encountered this issue when testing jaraco.functools on Python 3.7.0b2 on macOS, but did not encounter it on Python 3.7.0a4+ as found on the Travis nightly builds. More details are logged in https://github.com/pytest-dev/pytest/issues/3276. I'm not sure yet whether inspect.getfile should be adapted to raise a TypeError in this case, or if doctest.DocTestFinder.find should account for getfile returning None. If we choose to update inspect.getfile, I should caution there's a bit of copy/paste there, so two branches of code will need to be updated. Barry, I'd love to hear what your thoughts are on this and what you'd like to do. And definitely let me know if I can help. ---------- components: Interpreter Core, Library (Lib) keywords: 3.7regression messages: 313197 nosy: barry, jason.coombs priority: normal severity: normal status: open title: AttributeError in doctest.DocTestFinder.find versions: Python 3.7 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue32991> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com