Python脚本中有一行代码可以打印上面的行吗?
更新
动机
答案 0 :(得分:1)
阅读(用眼睛),您可以使用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
如果你希望自动化代码阅读,而不是变形,你可以使用如此http://www.dalkescientific.com/writings/diary/archive/2005/04/20/tracing_python_code.html所示的linecache而不是打印将它放入列表并获得任何值想要:))
希望它会有所帮助。
答案 1 :(得分:0)
我认为你问的是错误的问题(也许?) - 你是否想要调用堆栈中的最后一项?如果是这样,你可能会这样做:
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')
答案 2 :(得分:-2)
根据复杂程度,这可能是不明智的,你可以读取你的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
>>>