【问题标题】:No line number shown for run-time error from Python module没有为 Python 模块的运行时错误显示行号
【发布时间】:2015-05-31 12:03:40
【问题描述】:

大多数 Python 错误都会产生回溯,显示违规语句的行号。但由于某种原因,一些运行时错误不会。

例如,在仅包含两行的模块上运行“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 numbers runtime-error line traceback


【解决方案1】:

你执行:

python -m mymodule.py

试试这个:

python mymodule.py

【讨论】:

    【解决方案2】:

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

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

    最后,要解决问题,键入

    python -m ./mymodule
    

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

    1. 进行模块导入时,.py 扩展名被省略。

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

    【讨论】:

    • 非常感谢 - 这就是问题所在。离开 .py 给了我正确的跟踪(我不需要 ./ - 只是“python -m mymodule”)。
    【解决方案3】:

    您使用的是哪个 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2013-12-29
      • 2018-12-18
      • 1970-01-01
      相关资源
      最近更新 更多