我正在尝试评估任意字符串,以了解它们是否为有效的Python函数定义。
我最初进行了此测试:
i1 = "def z(a): return a"
exec(i1)
i2 = "def z(a): eturn a"
exec(i2)
这会引发i2的SyntaxError。然后,我尝试了必须评估的真实值:
i3 = """def fct_lambda(s,x):
return lambmax*(x>xmin)"""
exec(i3)
i4 = """def fct_lambda(s,x):
eturn lambmax*(x>xmin)"""
exec(i4)
产生i4的SyntaxError似乎没问题。但是后来我明白了:
i5 = """def densite_initiale(x):
return (((((x-0.0005)/0.00025)*(1-(x-0.0005)/0.00025))**5)*(x>0.0005)*(x<0.00075))"""
exec(i5)
i6 = """def densite_initiale(x):
eturn (((((x-0.0005)/0.00025)*(1-(x-0.0005)/0.00025))**5)*(x>0.0005)*(x<0.00075))"""
exec(i6)
对于i6,这不会产生任何错误。但是,如果删除单个括号,则会收到发回SyntaxError的错误,但不会返回
eturn
NameError的错误。另外,这是正确的方法吗?
最佳答案
eturn(insert_expression_here)
不是语法错误。解释器假设您正在使用括号内的参数调用名为eturn
的方法。当然,该功能不存在,但是在您实际执行densite_initiale
之前,解释器不会抱怨。