在Python脚本中是否有一行代码行来打印上面的行?在当前正在执行的行上面打印行
UPDATE:
动机
- 这是一个有趣的问题。我想知道Python的强大内省是否如此。
- 我正在保存这个问题的后续问题 - 我其实不想“打印上面的行”,而是抓住一段代码(我会知道哪些只在运行时),拆卸它并了解哪些变量被提及。我会解释为什么在后续:)
在Python脚本中是否有一行代码行来打印上面的行?在当前正在执行的行上面打印行
UPDATE:
动机
我认为你问错了问题(也许?如果是这样,你可能做这样的事情:
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
>>>
-1:不仅是奇怪的是,它不会工作:你不能一次执行整行文件。 –
认真,反对票。我没有说这是一个好主意,我说这取决于复杂性。如果你的文件是一组数学运算,没有理由不起作用 – pyInTheSky
要阅读(用眼睛)可以使用PDB
只需导入PDB,然后你可以这样做:
代码:
a = 'test'
import pdb; pdb.set_trace()
运行后代码,你将会像环境一样在shell中停止,你将能够做到这一点:
-> import pdb; pdb.set_trace()
(Pdb) print a
test
(Pdb) l
1 a = 'test';
2 -> import pdb; pdb.set_trace()
[EOF]
所以,你想看看L(IST)命令:当前文件
列表源代码。如果没有参数,请在当前行周围列出11 行或继续之前的列表。用 一个参数,在该行列出11行。有两个参数, 列出给定范围;如果第二个参数小于第一个参数,则它被解释为一个计数。
更http://docs.python.org/library/pdb.html
如果你想自动代码词态 -
其他语言,如Perl,Python和JavaScript的,允许程序 创建新的代码并在运行时使用eval函数执行它,但不允许现有代码发生变异。 修改(即使没有机器代码确实被覆盖) 的错觉是通过修改函数指针
实现
来源:http://en.wikipedia.org/wiki/Self-modifying_code
如果你想自动读码,但没有变形,你可以使用linecache,如这里http://www.dalkescientific.com/writings/diary/archive/2005/04/20/tracing_python_code.html所示,而不是打印把它放到一个列表中,并得到你想要的任何值:)
希望它会有所帮助。
也许,但你为什么需要那个?你不知道你在写什么代码吗? – delnan
我不知道有一个很好的方法来实现这一点,但没有什么是不可能的。你为什么需要这个?多解释一下,必须有更好的方法来实现你想要的任何东西。 – naeg
我同意w/demian,检查是非常酷...不知道你可以利用它,但http://wiki.python.org/moin/ByteplayDoc是相当惊人的 – pyInTheSky