【问题标题】:Doctest and relative importsDoctest 和相关导入
【发布时间】:2010-10-28 21:16:16
【问题描述】:

我在使用带有相对导入的 doctest 时遇到了问题。简单的解决方案就是摆脱相对进口。还有其他的吗?

假设我有一个名为 example 的包,其中包含 2 个文件:

example/__init__.py

"""
This package is entirely useless.
>>> arnold = Aardvark()
>>> arnold.talk()
I am an aardvark.
"""

from .A import Aardvark

if __name__ == "__main__":
    import doctest
    doctest.testmod()

示例/A.py

class Aardvark(object):
    def talk(self):
        print("I am an aardvark.")

如果我现在尝试

python example/__init__.py

然后我得到错误

Traceback (most recent call last):
  File "example/__init__.py", line 8, in <module>
    from .A import Aardvark
ValueError: Attempted relative import in non-package

【问题讨论】:

  • 我会摆脱相对导入,许多 Python 样式指南强烈反对它们,大多数禁止它们。
  • 我没有意识到这一点。干杯。

标签: python doctest


【解决方案1】:

创建另一个文件my_doctest_runner.py:

if __name__ == "__main__":
    import doctest
    import example
    doctest.testmod(example)

执行my_doctest_runner.py 以在example/__init__.py 中运行文档测试:

$ python2.7 my_doctest_runner.py
**********************************************************************
File "/tmp/example/__init__.py", line 4, in example
Failed example:
    arnold.talk()
Expected:
    I am an aaardvark.
Got:
    I am an aardvark.
**********************************************************************
1 items had failures:
   1 of   2 in example
***Test Failed*** 1 failures.

【讨论】:

  • 感谢您的回答。最后,根据 Jason Scheirer 的评论,我最终将相对导入更改为绝对导入(来自 example.A import Aadvark)。
【解决方案2】:

做事

from A import Aardvark

【讨论】:

  • 好吧,恐怕这会破坏 python 3 的兼容性。
  • 虽然这段代码可以回答问题,但最好解释一下如何解决问题,并提供代码作为示例或参考。仅代码的答案可能会令人困惑且缺乏上下文。
猜你喜欢
  • 2011-01-23
  • 1970-01-01
  • 2016-04-16
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
相关资源
最近更新 更多