InteractiveInterpreter.runco​​de和exec函数之间的区别?

时间:2013-10-11 02:54:25

标签: python exec

我有这段代码:

import code

interpreter = code.InteractiveInterpreter()
myCode = code.compile_command('if True: print("IT\'S TRUE!!")')
interpreter.runcode(myCode)

我想知道InteractiveInterpreter.runcode()和普通exec()函数有什么区别?上面的代码不起作用,但是这个代码确实如此:

exec("if True: print('IT\'S TRUE!!')")

1 个答案:

答案 0 :(得分:1)

>>> import code
>>> 
>>> interpreter = code.InteractiveInterpreter()
>>> myCode = code.compile_command('if True: print("IT\'S ONE!!")')
>>> interpreter.runcode(myCode)
TypeError: exec: arg 1 must be a string, file, or code object

interpreter.runcode显然接受字符串或代码。

但是myCode是无。

>>> myCode
>>> 

根据code.compile_command documentation

  

...   返回一个代码对象(与compile(source,filename,symbol)相同)   如果命令完整有效;如果命令是无   不完整的;如果命令完整且包含,则引发SyntaxError   语法错误,或者如果命令引发OverflowError或ValueError   包含无效的文字。

如果您将字符串传递给interpreter.runcode,则可以正常工作。

>>> interpreter.runcode('if True: print("IT\'S ONE!!")')
IT'S ONE!!