编译/执行程序无法在其自己的范围内分配值,从而导致内部语法错误

我的python有点奇怪。我正在尝试使用exec / eval / compile从字符串形式执行一些代码。特别是exec,但是由于语法错误而静默失败,因此我改用eval。

#start of document

print( compile( 'Test_val = 1;','None','eval' ) )

Traceback (most recent call last):
  File "/Users/lucasyoung/Desktop/Application/__init__.py",line 6,in <module>
    print( compile( 'Test_val = 1;','eval' ) )
  File "None",line 1
    Test_val = 1;
             ^

我做了一些测试,例如,可以通过编译调用一条打印语句。我可以称变量为存在,但似乎无法命名它们。奇怪的是,这在编译后的代码自身上下文的范围内。

我知道堆栈对超细节问题有很大的要求,但是老实说我不知道​​该说些什么。 Exec应该从字符串中激发一些代码。我正在调用的代码是完全有效的。我很困惑。

hopefulyatou 回答:编译/执行程序无法在其自己的范围内分配值,从而导致内部语法错误

首先eval()和exec()之间有区别

eval():eval()方法返回从表达式求值的结果。

eval函数对单个表达式执行相同的操作,并返回表达式的值:

exec():exec()不返回任何值,它返回None。

exec函数(在Python 2中为语句)用于执行动态创建的语句或程序:

因此

eval('Test_val = 1;')不是有效的eval表达式。

exec('test_val = 1;')是exec的有效表达式

对于您的情况,您应该使用

print( compile( 'Test_val = 1;','None','exec' ) )

请检查What's the difference between eval,exec,and compile?以获取更多信息

本文链接:https://www.f2er.com/3156646.html

大家都在问