对于测试驱动的教学模块,我需要以精确的顺序检查文档测试。 有没有办法按照定义顺序获取当前模块中的所有可调用对象?
我尝试过的:
- 循环全局变量并检查对象是否可调用。问题是 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/