Karthikeyan Singaravelan <[email protected]> added the comment:
This might be due to changes introduced in
a23d30f64bd9c5655cfae7f359d4279c47f6cab3 where __file__ is set to None. Hence
the below returns None but before the commit this used to return an
AttributeError and print "missing" . This was not handled in doctest causing
error. Adding Barry for confirmation.
# foo.py
import empty_package
print(getattr(empty_package, '__file__', 'missing'))
➜ cpython git:(2b5937ec0a) ✗ git checkout
a23d30f64bd9c5655cfae7f359d4279c47f6cab3 && make -s -j4 > /dev/null
Previous HEAD position was 2b5937ec0a bpo-32734: Fix asyncio.Lock multiple
acquire safety issue (GH-5466) (#5501)
HEAD is now at a23d30f64b bpo-32303 - Consistency fixes for namespace loaders
(GH-5481) (#5503)
➜ cpython git:(a23d30f64b) ✗ ./python.exe foo.py
None
➜ cpython git:(a23d30f64b) ✗ git checkout
a23d30f64bd9c5655cfae7f359d4279c47f6cab3~1 && make -s -j4 > /dev/null
Previous HEAD position was a23d30f64b bpo-32303 - Consistency fixes for
namespace loaders (GH-5481) (#5503)
HEAD is now at 2b5937ec0a bpo-32734: Fix asyncio.Lock multiple acquire safety
issue (GH-5466) (#5501)
➜ cpython git:(2b5937ec0a) ✗ ./python.exe foo.py
missing
There is a unittest with empty package and it's just that doctest.testmod(mod)
was not called on the empty package causing this not to be found. A simple
patch would be to check for None where None is a valid value for DocTest.
Another possible fix would be to have module.__name__ for None but since this
is for empty packages I assume there won't be any doctest to parse in DocTest
constructor.
diff --git a/Lib/doctest.py b/Lib/doctest.py
index 79d91a040c..e97555ed2f 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -1060,7 +1060,7 @@ class DocTestFinder:
filename = None
else:
filename = getattr(module, '__file__', module.__name__)
- if filename[-4:] == ".pyc":
+ if filename and filename[-4:] == ".pyc":
filename = filename[:-1]
return self._parser.get_doctest(docstring, globs, name,
filename, lineno)
diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py
index f1013f2572..b99f2aea2f 100644
--- a/Lib/test/test_doctest.py
+++ b/Lib/test/test_doctest.py
@@ -699,6 +699,7 @@ class TestDocTestFinder(unittest.TestCase):
support.forget(pkg_name)
sys.path.pop()
assert doctest.DocTestFinder().find(mod) == []
+ doctest.testmod(mod)
def test_DocTestParser(): r"""
Without patch the line doctest.testmod(mod) in unittest fails as below with
TypeError and with patch the tests pass
$ ./python.exe Lib/test/test_doctest.py
doctest (doctest) ... 66 tests with zero failures
doctest (test.test_doctest) ... 516 tests with zero failures
test_empty_namespace_package (__main__.TestDocTestFinder) ... ERROR
======================================================================
ERROR: test_empty_namespace_package (__main__.TestDocTestFinder)
----------------------------------------------------------------------
Traceback (most recent call last):
File "Lib/test/test_doctest.py", line 702, in test_empty_namespace_package
doctest.testmod(mod)
File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/doctest.py",
line 1947, in testmod
for test in finder.find(m, name, globs=globs, extraglobs=extraglobs):
File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/doctest.py",
line 932, in find
self._find(tests, obj, name, module, source_lines, globs, {})
File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/doctest.py",
line 982, in _find
test = self._get_test(obj, name, module, globs, source_lines)
File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/doctest.py",
line 1063, in _get_test
if filename[-4:] == ".pyc":
TypeError: 'NoneType' object is not subscriptable
----------------------------------------------------------------------
Ran 1 test in 0.027s
FAILED (errors=1)
Traceback (most recent call last):
File "Lib/test/test_doctest.py", line 3032, in <module>
test_main()
File "Lib/test/test_doctest.py", line 3015, in test_main
support.run_unittest(__name__)
File
"/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/test/support/__init__.py",
line 2064, in run_unittest
_run_suite(suite)
File
"/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/test/support/__init__.py",
line 1983, in _run_suite
raise TestFailed(err)
test.support.TestFailed: Traceback (most recent call last):
File "Lib/test/test_doctest.py", line 702, in test_empty_namespace_package
doctest.testmod(mod)
File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/doctest.py",
line 1947, in testmod
for test in finder.find(m, name, globs=globs, extraglobs=extraglobs):
File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/doctest.py",
line 932, in find
self._find(tests, obj, name, module, source_lines, globs, {})
File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/doctest.py",
line 982, in _find
test = self._get_test(obj, name, module, globs, source_lines)
File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/doctest.py",
line 1063, in _get_test
if filename[-4:] == ".pyc":
TypeError: 'NoneType' object is not subscriptable
----------
nosy: +barry, xtreak
versions: +Python 3.8
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue36406>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com