为什么这不会返回错误?

时间:2014-03-14 14:27:47

标签: function python-2.7 error-handling

我正在尝试评估任意字符串,以了解它们是否是有效的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。

此外,这是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

eturn(insert_expression_here)不是语法错误。解释器假设您使用括号内的参数调用名为eturn的方法。当然,这个功能并不存在,但是在您实际执行densite_initiale之前,解释员不会抱怨。