【问题标题】:How do I test arbitrary code after reaching an arbitrary program state in Pycharm?在 Pycharm 中达到任意程序状态后如何测试任意代码?
【发布时间】:2020-09-12 07:15:47
【问题描述】:

tldr;我希望我可以进入一个特定的程序状态,然后停止,然后继续编辑同一个文件,并使用这个过程迭代地向文件中添加代码。


详情:

我经常想做的是使用python控制台或者在特定的程序状态下运行一段特定的代码。但是,我不知道如何进入我需要的程序状态,以便我的代码以我想要的方式运行。

通常我以前做的是将调试器运行到一个断点(这样我就可以进入我想要的程序状态)。然后我会使用评估表达式栏。然而,这似乎真的很低效,特别是因为评估表达式栏很难用于多行内容,而且它似乎更多地用于单个表达式,而不是测试您打算使用的真实代码。如果我可以在运行不一定以线性方式(例如 jupyter 样式)组织的任意程序后执行、编辑和重新执行单元格,那将是理想的。

我知道可以执行单元格(shift+enter 或 control+enter)并执行选定的代码(option+shift+e)。但是,我似乎不知道如何正确使用它们以便我可以做我想做的事情(特别是进入程序状态以便测试我想要的代码)。所以我想做的是:

  1. 进入我想要的特定程序状态

然后

a) 在该程序状态下在控制台或 python 控制台中运行代码 b) 在该程序状态的单元格(或选择)中运行代码

我该怎么做?

或者更好的说法:1)获得我想要的程序状态 2)测试新代码(不仅仅是表达式)

我发现的另一个问题是,这似乎需要将我的代码重构为类似 jupyter 的文件...希望我可以避免这种情况,因为重构很困难,而且很多时候我使用来自其他地方的非结构化代码就这样……


编辑并进一步说明

我最感兴趣的是以下工作流程:

  1. 执行代码并在断点处停止
  2. 然后在该断点之后(以及特定的程序状态),理想情况下在当前文件中构建下一段代码。

对于第 2 步,我将使用类似执行选择的内容。如果我可以进入程序状态(比如使用断点),然后在断点之后编写代码并执行它(例如使用alt+shift+e),那将是完美的。但是,请注意断点后我正在执行的下一个代码是新代码的关键点,它还没有,我不知道它是什么,因为它取决于当前的程序状态。我知道在 vs-code 中处于调试状态时添加新代码是行不通的。我刚查了一下,在pycharm中也不起作用。

我真的很喜欢用 pycharm 中的单元格来做这件事。如果我可以进入程序状态(例如使用断点),然后在此之后创建新代码(例如使用 python 单元),然后继续运行代码并继续中断和构建。这可能是理想的。

最好的方法似乎是从调试器控制台复制粘贴我编写的代码(不幸的是最终从控制台获得 >>>),然后重新运行调试器。

我希望我不必像 pycharm 单元的工作方式那样重新运行调试器和编辑文件。


可能的解决方案:将粘贴程序状态复制到 jupyter

或者如果我可以“拖放程序状态”就可以了。我总是会打开一个 jupyter 样式的脚本,然后“复制粘贴”上次运行的程序状态,然后在另一个文件的新单元格中使用它。


交叉发布:

【问题讨论】:

  • 这是一个很好的论据,可以让函数接受和返回(理想情况下是不可变的)状态并且不依赖于变异的全局状态。然后你只需要构造一个虚拟状态对象并将其传递给你要测试的函数。
  • 我曾参与过代码的当前状态高度依赖于您当时所做的项目的项目。我发现对我来说最好的方法是在我想放入新代码或测试某些东西的任何地方进行条件检查。从那里我要么转储变量以在其他地方使用“测试数据”,要么我会调用一个单独的函数来编写新代码。重要的部分是初始条件检查以捕获您希望处于程序状态的位置。
  • @Rashid'Lee'Ibrahim 我很好地运行我的调试器(或其他东西)来获取程序状态,然后将其转储到 jupyter 风格的笔记本,然后编写我需要的代码。那会很好用。也许您可以更详细地分享您在评论中的意思?听起来很有用,但我不知道该怎么做。
  • @CharlieParker 就我而言,我有很多数据来自几个 api 和一个数据库。有时我只需要一组具有特定参数的特定数据,所以我会将代码运行到创建数据对象的位置,然后我只需将数据从那里复制到草稿中用于测试数据的文件。
  • @CharlieParker 其他时候我需要进入已经运行的代码。这是关于if-statement 的部分。根据您知道何时需要设置断点以运行,您可以在该点转移现有项目以调用正在进行的工作的“新功能”。

标签: pycharm


【解决方案1】:
  1. 确保调试器配置已打开 python 控制台(如果您有另一个选项,这可能不起作用,例如,我有它,因为 print("\a") 不工作。

  2. 然后,运行代码你的断点(确保调试器已打开 python 控制台)

  3. 然后在断点下方编写代码并选择它并按shift + control + E。然后它在调试器控制台中运行它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    相关资源
    最近更新 更多