PyCharm(Python 3.x)修改类而无需重新运行脚本

时间:2018-08-23 10:28:29

标签: python python-3.x debugging ide pycharm

我正在使用PyCharm Pro 2018,最近才从Spyder切换到它。

我的脚本的第一部分涉及加载大量数据,大约需要1-2分钟。在脚本完成或出错时,我会得到一个python控制台,其中包含我可以调查的所有当前变量。

现在,如果我想更改方法/功能并在没有完全重新启动脚本的情况下再次运行它,该怎么办?

这里有一些伪代码:

class FetchData():
    ...

class ParseData():
    ...
    def subroutine1(self, ...):
        ...

data = FetchData(...) # takes a long time
parser = ParseData(data,...)
parser.subroutine1(...)

运行此代码并在subroutine1中遇到错误后,我得到一个控制台,可以查看“数据”和“解析器”(以及其他任何变量)。是否可以修改subroutine1并在控制台“ parser.subroutine1(...)”中手动重新运行该方法,但更改后的方法和“ data”仍保持不变?

如果不是这样,或者通常来说,在不需不断重新加载“ data = FetchData(...)”的情况下对subroutine1进行编码的最佳实践是什么?

非常感谢!

2 个答案:

答案 0 :(得分:0)

我有两种解决方法:

1。)使用Jupyter笔记本。笔记本电脑最大的功能/优势之一就是这种功能。相互封装代码的各个部分,如果以后的代码单元/块中出现错误,则不会使您从头开始。

2。)腌制您的数据结果,并引用它。 Python的内置pickle模块具有创建“棘手”文件的能力,该文件可以保存您在长时间运行的子例程中创建的几乎所有数据。因此,将您的代码分成2个文件,长时间运行/创建数据的文件只会创建数据并将其腌制;仅在需要更新pickle文件中的数据时才运行它。您要在数据上运行的第二个/后续例程在一个python文件中,该文件打开/读取pickle文件(这是非常快的动作),然后对其中的先前存储的数据进行处理。

答案 1 :(得分:0)

接近你所要求的:

  1. 在调试模式下执行
  2. 转到涉及呼叫您的 subroutine1
  3. 在调试器控制台中执行该行(例如突出显示它,然后按 Alt+Shift+E)
  4. 如果您不喜欢结果:
    1. 更改 subroutine1,然后完全突出显示它(从 def subroutine1(self, ...): 到最后一行)
    2. 执行 Alt+Shift+E(在调试器控制台中执行)
    3. 然后再次执行涉及调用您的 subroutine1 的行,这将根据您更新的子例程1 等为您提供结果