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

Reply via email to