python - Python 函数列表,按照它们在模块中的定义顺序

标签 python doctest

对于测试驱动的教学模块,我需要以精确的顺​​序检查文档测试。 有没有办法按照定义顺序获取当前模块中的所有可调用对象?

我尝试过的:

  • 循环全局变量并检查对象是否可调用。问题是 globals 是一个字典,因此没有排序。
  • 直接使用 doctests 并不方便,因为“遇到第一个错误就停止”对我不起作用,因为我有几个函数要测试。

最佳答案

每个函数对象都有一个存储第一行号的代码对象,因此您可以使用:

import inspect

ordered = sorted(inspect.getmembers(moduleobj, inspect.isfunction), 
                 key=lambda kv: kv[1].__code__.co_firstlineno)

获取 (name, function) 对的排序列表。对于 Python 2.5 及更早版本,您需要使用 .func_code 而不是 .__code__

您可能需要进一步过滤在模块本身 中定义但尚未导入的函数; func.__module__ == moduleobj.__name__ 应该足够了。

关于python - Python 函数列表,按照它们在模块中的定义顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21386366/

相关文章:

python - pip 在 Anaconda Prompt 中无法识别

python doctest异常测试处理

python - 为什么递归改变结果?

c++ - 如何对assert()失败进行单元测试?

python - 在 OS X 上安装 python 2 的最佳方法是什么?

python - 为什么 Python 的 numpy.polyval() 这么慢?

python - 为什么 doctests 在使用 Sphinx 的 `make doctest` 运行时会引发 NameError ?

python - python 2 doctest 怎么会失败并且失败消息中的值没有差异?

python - Django:IntegrityError:列 user_id 不是唯一的

python - 使用 lxml python 解析 xhtml