2024-04-29 11:35:41 发布
网友
我正在python控制台进行调试,希望每次进行更改时都重新加载一个模块,这样就不必退出控制台并重新输入它。我在做:
>>> from project.model.user import * >>> reload(user)
但我收到:
>>>NameError: name 'user' is not defined
重新加载整个用户类的正确方法是什么?有没有更好的方法可以做到这一点,也许在调试时自动更新?
谢谢。
按照要求,你能做的就是
>>> from project.models.user import * >>> import project # get module reference for reload >>> reload(project.models.user) # reload step 1 >>> from project.models.user import * # reload step 2
如果直接使用用户模块,而不是执行import *(这几乎从来不是正确的方法),则会更好、更干净。那就是
import *
>>> from project.models import user >>> reload(user)
你想怎么做就怎么做。但是,不太好。如果你真的需要经常重新加载模块,我不得不问:为什么?
我的怀疑(根据以前的经验,人们会问类似的问题)是你在测试你的模块。有很多方法可以测试一个模块,而在交互式解释器中手工测试是最糟糕的方法之一。将一个会话保存到文件中,并使用^{}快速修复。或者,将其作为程序编写并使用python -i。不过,唯一真正好的解决方案是使用^{}模块。
python -i
如果不是这样,希望是更好的,而不是更坏的。实际上,reload没有什么好用的(事实上,它在3.x中被删除了)。它不能有效地工作——您可能重新加载一个模块,但会留下以前版本的剩余部分。它甚至不能在所有类型的模块上工作——当重新加载时,扩展模块将不能正确地重新加载,有时甚至会严重崩溃。
reload
在交互式解释器中使用它的上下文并没有留下很多选择,比如你在做什么,以及什么是真正的最佳解决方案。除此之外,有时人们使用reload()来实现插件等。这充其量是危险的,而且经常可以使用exec(我们发现自己身处的邪恶领域)或隔离进程来进行不同的操作。
reload()
exec
不能有效地使用reload()。
Python不支持重新加载或卸载以前导入的 模块;模块引用使重新加载模块不切实际,因为引用可能存在于程序的许多地方。
Python3完全删除了reload()特性。
对于python3,重新加载已移动到imp模块。您可以使用imp.reload()。您可以参考this post。
imp.reload()
>>> import imp >>> import project # get module reference for reload >>> imp.reload(project.models.user) # reload step 1 >>> from project.models.user import * # reload step 2
按照要求,你能做的就是
如果直接使用用户模块,而不是执行
import *
(这几乎从来不是正确的方法),则会更好、更干净。那就是你想怎么做就怎么做。但是,不太好。如果你真的需要经常重新加载模块,我不得不问:为什么?
我的怀疑(根据以前的经验,人们会问类似的问题)是你在测试你的模块。有很多方法可以测试一个模块,而在交互式解释器中手工测试是最糟糕的方法之一。将一个会话保存到文件中,并使用^{} 快速修复。或者,将其作为程序编写并使用} 模块。
python -i
。不过,唯一真正好的解决方案是使用^{如果不是这样,希望是更好的,而不是更坏的。实际上,
reload
没有什么好用的(事实上,它在3.x中被删除了)。它不能有效地工作——您可能重新加载一个模块,但会留下以前版本的剩余部分。它甚至不能在所有类型的模块上工作——当重新加载时,扩展模块将不能正确地重新加载,有时甚至会严重崩溃。在交互式解释器中使用它的上下文并没有留下很多选择,比如你在做什么,以及什么是真正的最佳解决方案。除此之外,有时人们使用
reload()
来实现插件等。这充其量是危险的,而且经常可以使用exec
(我们发现自己身处的邪恶领域)或隔离进程来进行不同的操作。不能有效地使用reload()。
Python不支持重新加载或卸载以前导入的 模块;模块引用使重新加载模块不切实际,因为引用可能存在于程序的许多地方。
Python3完全删除了reload()特性。
对于python3,重新加载已移动到imp模块。您可以使用
imp.reload()
。您可以参考this post。相关问题 更多 >
编程相关推荐