Python 打印当前执行行上方的行

Python 打印当前执行行上方的行,python,Python,Python脚本中的一行代码有没有办法打印上面的一行 更新: 动机 这是一个有趣的问题。我想知道Python强大的内省是否有那么大的作用。 我将此保存下来作为后续问题—实际上我不想打印上面这一行,而是想获取某一行代码,我将只在运行时知道哪一行,分解它并了解提到了哪些变量。我将在后续行动中解释原因: 我想你问错问题了,也许吧您是否希望获取调用堆栈中的最后一项?如果是这样,您可以这样做: import inspect def do_add(a, b): if type(a) is

Python脚本中的一行代码有没有办法打印上面的一行

更新: 动机

这是一个有趣的问题。我想知道Python强大的内省是否有那么大的作用。 我将此保存下来作为后续问题—实际上我不想打印上面这一行,而是想获取某一行代码,我将只在运行时知道哪一行,分解它并了解提到了哪些变量。我将在后续行动中解释原因:
我想你问错问题了,也许吧您是否希望获取调用堆栈中的最后一项?如果是这样,您可以这样做:

import inspect

def do_add(a, b):
        if type(a) is not int or type(b) is not int:
                print inspect.stack()[1] # last stack item
                return None

        return a + b

do_add(1, 3)
do_add(1, 'asd')

根据复杂性的不同,这可能是不明智的,您可以读取python文件w/readlines,打印它们,然后在循环结构中对它们调用exec

举个例子给那些愚蠢到暗示在我所指的有限范围内这是不可能的人

>>> a = ["a=1+1","b=a","print b"]
>>> for item in a:
...     print item
...     exec(item)
... 
a=1+1
b=a
print b
2
>>> 
要用眼睛阅读,可以使用PDB

只需导入pdb,即可执行以下操作:

代码:

运行代码后,您将在类似shell的环境中停止,您将能够执行以下操作:

-> import pdb; pdb.set_trace()
(Pdb) print a
test
(Pdb) l
  1     a = 'test';
  2  -> import pdb; pdb.set_trace()
[EOF]
因此,您要查看list命令:

列出当前文件的源代码。如果没有参数,请列出11 当前行周围的行或继续上一个列表。具有 一个参数,列出该行周围的11行。有两个论点,, 列出给定的范围;如果第二个参数小于第一个参数, 它被解释为计数

更多

如果您希望自动化代码变形-

其他语言,如Perl、Python和JavaScript,允许使用程序 要在运行时创建新代码并使用eval函数执行它, 但不允许对现有代码进行变异。幻觉 修改,即使没有机器代码被真正覆盖 是通过修改函数指针来实现的

资料来源:

如果希望自动读取代码,但不希望变形,则可以使用linecache,如图所示,而不是打印,将其放入列表中,并获取所需的任何值:


希望它能有所帮助。

也许吧,但你为什么需要它呢?难道你不知道你在写什么代码吗?我不知道有什么好方法可以实现这一点,但没有什么是不可能的。你为什么需要这个?再解释一点,一定有更好的方法来实现你想要的。我同意w/demian,inspect很酷…不确定你能从中得到什么,但非常令人惊讶-1:不仅是奇怪,它不会起作用:你不能一次执行一整行文件。说真的,投反对票。我没说这是个好主意,我说这取决于复杂性。如果您的文件是一组数学运算,那么没有理由不起作用
-> import pdb; pdb.set_trace()
(Pdb) print a
test
(Pdb) l
  1     a = 'test';
  2  -> import pdb; pdb.set_trace()
[EOF]