【问题标题】:PyCharm (Python 3.x) modify a class without re-running the scriptPyCharm (Python 3.x) 修改类而不重新运行脚本
【发布时间】:2019-01-29 16:59:56
【问题描述】:

我正在使用 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(...)”中手动重新运行该方法,更改后的方法和“数据”仍然完好无损?

如果不是,或者一般来说,在 subroutine1 上编码而不需要不断地重新加载“data = FetchData(...)”的最佳实践是什么?

非常感谢!

【问题讨论】:

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


    【解决方案1】:

    我有两种方法:

    1.) 使用 Jupyter Notebook。 Notebooks 最大的特点/优势之一就是这种能力。将部分代码相互封装,如果您在以后的单元格/代码块中遇到错误,它不会让您从头开始。

    2.) 腌制您的数据结果并参考它。 Python 的内置 pickle 模块能够创建“pickle”文件,这些文件几乎可以保存您在长时间运行的子程序中创建的任何数据。因此,将您的代码拆分为 2 个文件,长时间运行/创建数据的文件只会创建数据并将其腌制;仅当您需要更新 pickle 文件中的数据时才运行它。您要对数据运行的第二个/后续例程位于一个 python 文件中,该文件打开/读取 pickle 文件(这是一个非常快速的操作),然后处理其中先前存储的数据。

    【讨论】:

      【解决方案2】:

      接近你要求的东西:

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

      【讨论】:

        猜你喜欢
        • 2015-08-30
        • 2021-07-31
        • 1970-01-01
        • 2021-05-14
        • 1970-01-01
        • 2019-04-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        相关资源
        最近更新 更多