【问题标题】:"Return" in the middle of a script [closed]脚本中间的“返回”[关闭]
【发布时间】:2016-07-13 17:52:49
【问题描述】:

我正在调试一个脚本,暂时想在中间停止脚本并为不同的变量绘制一些值。 Python中没有办法从脚本中“返回”吗?我不想完全退出 Python。本质上,我想要的是在特定点冻结脚本。如果我可以插入一个命令,那就太好了——例如,return——它会这样做——然后我会在完成调试后将其删除。

这里有几种方法可以实现我目前认为在我的工作环境中不优雅的事情:

(1) 将脚本代码放入一个函数中,并在该函数中途返回所需的变量。

(2)注释掉我要停止的点之后的所有代码。

(3) 将所有需要的变量保存到磁盘,然后调用quitsys.exit 完全退出Python。

没有更好的选择吗?

理论题

为什么 Python 的设计者会决定不允许在脚本中使用 return 语句?这有什么逻辑吗?

【问题讨论】:

  • @dbliss 你尝试过在 pdb 中使用matplotlib 吗?
  • @dbliss 我刚刚尝试过:gist.github.com/waynew/0b259f8280f317226428a35fa07ce1ce,甚至在 pdb 中运行 plt.plot(data); plt.show() 也可以。那么...什么不适合你?
  • 请记住,如果您没有尝试过某事并且有人建议(除了,你知道,rm -rf /),尝试它通常是个好主意; )
  • 你对函数有什么误解?虽然编写一个在全局范围内执行所有操作的快速 Python 脚本肯定可能(而且通常很方便),但对于严肃的程序来说,这不是推荐的做法。将代码封装到函数(和类,在适当的时候)要好得多。它为您提供了更多控制权,避免了所有名称污染全局命名空间,并提高了代码的可重用性,因为它允许安全地导入文件。
  • @MilesErickson 您从我的问题中建议选项 1。这种冗余。 . .不雅,有人会说。

标签: python debugging return exit


【解决方案1】:

可以使用pdb 绘制一些东西(至少,它在 OS-X 上对我来说很好用):

from matplotlib import pyplot as plt
import numpy as np

array_x = np.arange(10)
array_y = np.arange(10)

import pdb; pdb.set_trace()

print (array_x, array_y)

还有我的控制台输出(包括错字):

$ python ~/sandbox/test.py
> /Users/mgilson/sandbox/test.py(9)<module>()
-> print (array_x, array_y)
(Pdb) plt.ion()
(Pdb) plt.plit(array_x, array_y)
*** AttributeError: 'module' object has no attribute 'plit'
(Pdb) plt.plot(array_x, array_y)
[<matplotlib.lines.Line2D object at 0x112120610>]
(Pdb) c
(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))

我使用了plt.ion(),但您也可以轻松地使用plt.show()(在您定义了情节之后)。

【讨论】:

    猜你喜欢
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2015-02-12
    • 2012-11-12
    相关资源
    最近更新 更多