debugging Python -对导入文件的更改不生效

hsvhsicv  于 12个月前  发布在  Python
关注(0)|答案(2)|浏览(192)

我有一个名为test_file的文件,它是为了测试另一个名为file的文件而设计的。"test_file"在同一目录下也包含一个.txt文件。当我更新file时,保存,选择"更改到编辑器目录.",然后运行test_file,Enthought似乎没有意识到file被更新了。最初我以为每次更新file时都必须选择"更改到编辑器目录"选项,所以我这样做了,但是test_file仍然打印"成功",即使我故意编辑file,使test_file应该打印false。(是的,我确信它应该打印false,因为我在file中添加了一堆乱码,甚至是不应该运行的代码,例如抛出带有明显不正确缩进的return语句)。所以,本质上,Enthought Canopy没有意识到我已经更新了file
但是,如果我保存并退出所有内容,* 重新打开 * Enthought,选择"更改到编辑器目录",然后运行test_file,它会打印正确的结果。
这是非常令人沮丧的,因为我花了几天时间调试 * 正确的 * 代码才意识到这一点。这让我非常担心,因为我不知道我过去测试的是否真的正确,我不希望这种情况在未来发生。
可能的原因是什么?(注意:我不知道这是Enthought问题还是Python问题)

hgqdbh6s

hgqdbh6s1#

在没有看到代码的情况下很难说,但我怀疑file是用一个等效于import file的命令导入的。Python缓存导入的模块,所以它不会拾取file中的更改。这是一个Python特性,独立于Enthought Canopy。
如果是这种情况,可以通过在test_file中的导入之后添加对reload的调用(https://docs.python.org/2/library/functions.html#reload)来解决这个问题,以显式地强制重新加载模块:

import file
  reload(file)
57hvy0tb

57hvy0tb2#

在Python2.x中,@pberkes 的答案是有效的。对于Python 3,你可以这样做:

  • 对于Python版本>= 3.4:*
import importlib
importlib.reload(module)
  • 对于Python 3.0-3.3版本:*
import imp
imp.reload(module)

source

相关问题