问题描述
问题
我在 Fedora 28 上使用 python 3.6.6。我的项目结构如下:
test/__init__.py
test/signal.py
test/notsignal.py
如果我运行$ python3 -m doctest -v test/signal.py
我得到:
10 items had no tests:
signal
signal.Handlers
signal.ItimerError
signal.Sigmasks
signal.Signals
signal._enum_to_int
signal._int_to_enum
signal.struct_siginfo
signal.struct_siginfo.__reduce__
signal.struct_siginfo.__repr__
0 tests in 10 items.
0 passed and 0 failed.
Test passed.
对我来说,这清楚地表明doctest
试图在内置signal
模块上运行。
通过重命名文件,我能够运行docset
。
我错过了什么还是这是一个错误?
繁殖
您可以使用以下 shell 脚本。
#!/bin/sh
mkdir -p test
touch test/__init__.py
echo -e ""'"'""'"'""'"'"\n>>> _ = print(f'Doctest at {__name__} was run.')\n"'"'""'"'""'"'"" > test/signal.py
cp test/signal.py test/notsignal.py
python3 -m doctest -v test/signal.py
python3 -m doctest -v test/notsignal.py
1楼
如果您查看 ,您可以看到 doctest 尝试导入您传递给它的模块。
很可能已经导入了标准库的信号模块:
$ python -c 'import sys;import doctest;print("signal" in sys.modules)'
True
当 doctest 尝试导入时,Python 解释器发现sys.modules
已经有一个名为“signal”的模块,并返回该模块而不是您的信号模块。
也许这是一个错误——也许 doctest 在它如何导入方面可能更聪明——但实际上我认为最好的做法是重命名你的模块。 通常,具有与标准库模块同名的模块几乎总是会导致问题。