Python 模块的 运行 时间错误没有显示行号

No line number shown for run-time error from Python module

大多数 Python 错误会产生回溯,显示有问题的语句的行号。但由于某些原因,一些 运行 时间错误不会。

例如,运行ning "python -m mymodule.py" 在仅包含两行的模块上:

args = {}
if len(args > 2): print("this is a run-time error. Should be: len(args) > 2")

失败:

c:\python34\python.exe: Error while finding spec for 'mymodule.py' (<class 'TypeError'>: unorderable types: dict() > int())

此代码示例来自一个更大的模块,该模块出现故障,并且没有行号,因此很难找到编码错误。

你执行:

python -m mymodule.py

试试这个:

python mymodule.py

您使用的是哪个 python 版本? Python 2.7 显示错误:

PATH>python -m scrap
    Traceback (most recent call last):
    File “C:\Python27\lib\runpy.py”, line 162, in _run_module_as_main
    “__main_J, fname, loader, pkg_name)
    File “C:\Python27\lib\runpy.py”, line 72, in _run_code
    exec code in run_globals
    File “PATH\scrap.py”, line 2, in <module>
        if len(args > 2): print(”this is a run-time error. Should be: len(args) > 2’
    )
    TypeError: object of type ‘bool’ has no len()

当您使用 -m 时,python 搜索 sys.path 模块,但没有找到您指定的文件。这是因为路径不(并且出于稳定性和安全性的原因通常不应该)包括当前工作目录。

由于错误是在命令行而不是在您的文件中产生的,因此没有错误的行号。

最后,要解决这个问题,请输入

python -m ./mymodule

这解决了命令行中的两个问题:

  1. 导入模块时省略.py扩展名。

  2. 您需要明确添加路径才能导入此模块(或将其移动到 sys.path 中的目录)。