如何以编程方式将行注入交互式Python?

时间:2013-10-22 02:30:04

标签: python

考虑这个小型的交互式Python会话:

>>> a = 'a'
>>> b = 'b'
>>> ab = a + b
>>> ab
'ab'

有没有办法以编程方式执行此操作?我想每行注入一行,然后对结果进行单元测试。我不能像通常那样创建Python脚本并执行它,因为有些代码在交互式Python中有不同的反应(例如,inspect.getcomments())。我想在交互式Python中测试行为。我更喜欢Python3解决方案,但我怀疑解决方案与Python2中的解决方案没有什么不同。

1 个答案:

答案 0 :(得分:3)

执行此操作的一种方法是使用Python的doctest模块。它本质上解析代码就好像它在Python REPL中一样,然后断言输出与该REPL中写入的内容相匹配。

$ cat foo
>>> a = 'a'
>>> b = 'b'
>>> ab = a + b
>>> ab
'ab'
$ python -m doctest foo
$ cat > bar
>>> a = 'a'
>>> b = 'b'
>>> ab = b + a # oops
>>> ab
'ab'
$ python -m doctest bar
**********************************************************************
File "bar", line 4, in bar
Failed example:
    ab
Expected:
    'ab'
Got:
    'ba'
**********************************************************************
1 items had failures:
   1 of   4 in bar
***Test Failed*** 1 failures.