【问题标题】:Unable to debug interactively with Python 2.7无法使用 Python 2.7 进行交互调试
【发布时间】:2011-04-03 04:02:05
【问题描述】:

我之前在 SO 问题中问过一个关于 python 中的相对路径的问题:How can I access relative paths in Python 2.7 when imported by different modules

提供的答案在我的所有脚本和函数中都非常有效。但是,当尝试在 IDLE (Python 2.7) 中调试文件时,会产生运行时错误。

谁能指出我使用__file__ 表示法的文档?另外我想了解为什么 IDLE 在运行示例代码时会产生错误,但从命令行运行相同的文件或双击它(对于 Windows 用户)不会。

任何帮助将不胜感激!

请注意,我在 Windows XP 上使用 virtualenv 运行 Python 2.7(在这些测试期间未激活)。

示例代码

import os
import sys
curdir = os.path.dirname(__file__) 
sys.path.append(curdir + '/..')

错误

Traceback (most recent call last):
File "C:\MyFile.py", line 3, in `<module>`
  curdir = os.path.dirname(`__file__`)
NameError: name '`__file__`' is not defined

【问题讨论】:

  • 要正确比较 IDLE 运行代码的方式(通过运行 Python)与 Python 自身运行代码的方式,必须对每种运行模式使用相同的运行模式。 IDLE Shell 与交互式解释器进行比较,从带有“python”的命令行开始。从 IDLE 编辑器窗口运行与使用 `python -i -m 文件从命令行运行代码相比。有一些差异是故意的,一些已经修复,一些应该修复但尚未修复,还有一些是不可避免的。

标签: python python-idle


【解决方案1】:

__file__ 如果您在解释器中编写,则不会设置。

所以:

>>> import os, sys
>>> curdir = os.path.dirname(__file__)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name '__file__' is not defined

预期。

__file__ 是 python 解释器调用的文件的名称 - 所以如果你从脚本中运行它,它会起作用。

$ python curdir.py
$

(脚本与我放入解释器的脚本完全相同,因此没有错误或输出)

根据我之前使用 IDLE 观察到的情况,它充当解释器 - 所以它会运行有问题的文件。但是,它不是从该文件开始的,因此永远不会设置__file__

【讨论】:

  • 感谢您的信息。根据我们的观察,您所说的确实有道理。但是,您知道 file 的文档在哪里吗?还有关于如何使用 file 符号调试文件的任何想法?因为它们对我正在研究的项目非常重要。再次感谢!
  • 回应评论:“但是,它不是从那个文件开始的,所以永远不会设置 file。”实际上,我右键单击该文件并使用“使用 IDLE 编辑”菜单选择并从 IDLE 运行文件以产生错误。我假设您的意思是 IDLE 加载要运行的文件内容,但不运行文件本身?
  • __file__ 由处理文件加载的runpy 设置。 IDLE 的行为不同,它本质上是在脚本上执行 exec,它没有设置 __file__ - 这是 IDLE 中的一个错误,仍未修复:Run Module does not set file
  • 任何时候 :) 祝你调试顺利。
  • @TyrantWave (和其他任何人) file 未设置 IDLE 的 Run => Run 模块的错误已在 bugs.python.org/issue8515 中修复,首先用于 3.3 (2012-4- 5) 然后为 2.7 (2013-6-30)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多