python - PyCharm 中有 "Edit and Continue"吗?像在 Eclipse/PyDev 中那样将代码重新加载到正在运行的程序中?

标签 python pycharm

您好所有 Python 开发人员!

在带有 PyDev 的 Eclipse 中,可以在调试时编辑 Python 文件。保存时,PyDev 调试器会将更新的代码重新加载到正在运行的程序中并使用我的新代码。如何在 JetBrains PyCharm(使用社区版)中做同样的事情?

当我这样做时,Eclipse/PyDev 会写出这样的输出:

pydev debugger: Start reloading module: "MyWidget" ... 
pydev debugger: Updated function code: <function close at 0x055F4E70>
pydev debugger: reload finished

我搜索了设置和网络,但找不到任何提示。很高兴有任何想法。谢谢。

编辑:我发现在 Eclipse/PyDev 中必须处于 Debug模式才能使用此功能。我在 PyCharm 中测试过,但没有重新加载。

最佳答案

PyCharm 不支持在社区版或专业版中进行编辑和继续,但这是我在调试时发现的一种解决方法。

由于您可以在控制台和/或表达式求值器中运行任意代码,因此在很多情况下,您可以执行对代码的更改而无需重新启动应用程序。这不完全像编辑并继续(这是我在 Visual Studio 中非常喜欢的一个功能,应该是 Pycharm 的一部分),但它对于避免在更改后从头开始重新启动程序以查看是否新代码按预期工作。

让我举例说明我使用的几种技术:

假设您有以下代码(有几个拼写错误/错误来说明技术)

test_value = [10,9,8,7,6,55,4,3,2,1]

for i in range(0,10):
    if test_value[i] == i:
        print "found the value: " + i

如果你运行这段代码,首先它会出错,因为你不能打印字符串加整数,而且我想匹配 5,而不是数组中的 55。所以我们开始吧。

像这样在 for 语句上设置断点并在调试器中运行代码。

enter image description here

当它闯入调试器时,您意识到它应该是 5 而不是 55。您可以将第 1 行更改为 test_value = [10,9,8,7,6,5,4, 而不是重新启动, 3,2,1] 然后选择该行,右键单击并选择 Execute Line in Console... 这会将 test_value 的值更改为带有 5 的数组。现在,第 4 行的 if 语句变为值 5 为 true。这将触发第 5 行的语法错误。

现在,如果您想确保语法正确,可以将第 5 行更改为 print "found the value:"+ str(i),选择该行并选择 Evaluate Expression.. . 从右键上下文菜单中。当您单击 Evaluate 时,结果将显示在对话框中(或者在这种情况下,因为它是一个打印命令,在控制台中)

enter image description here

现在我已经解决了这两个问题,我可以在第二遍中成功运行代码,而不是在不使用这些技术时可能需要多次通过。如果您在代码深处发现需要一段时间才能设置的错误,那么这些技术真的会得到返回。

显然,这是一个非常人为的示例,但希望这能说明如何在调试时同时使用 Evaluate Expression... 和 Execute Line...代码中的错误。

另外,如果您碰巧使用 Django,如果您对代码进行更改,PyCharm(专业版)将重新启动服务器。因此,如果您正在查看您的网页并发现问题,您可以更改代码并切换回网页,当您这样做时,正在运行的应用程序或已调试的应用程序将重新启动并且新代码刷新页面时将运行。同样,不是真正的编辑并继续,而是一种非常快速的方式来进行更改和测试。

关于python - PyCharm 中有 "Edit and Continue"吗?像在 Eclipse/PyDev 中那样将代码重新加载到正在运行的程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23333815/

相关文章:

python - 如何计算字符串中的方程式,python

python - 控制台可以找到文件,但是使用运行工具窗口找不到

python - 如何调用self方法并获取flask中的数据?

python - 在数据框中查找特定元素的列名

python - 监听简单表上的插入/更新事件

vim - 在ideavim上禁用鼠标支持

django - PyCharm 5 找不到 Django 1.9 模板

python - PyCharm 和外部工具的过滤器

pycharm:如何输入单引号?

python - 抽象类可以强制继承类将方法实现为静态吗?