Function 为什么不返回错误?

Function 为什么不返回错误?,function,python-2.7,error-handling,Function,Python 2.7,Error Handling,我试图计算任意字符串,以了解它们是否是有效的Python函数定义 我首先运行了这个测试: i1 = "def z(a): return a" exec(i1) i2 = "def z(a): eturn a" exec(i2) 这会引发i2的语法错误。然后我试着用我要评估的真实值: i3 = """def fct_lambda(s,x): return lambmax*(x>xmin)""" exec(i3) i4 = """def fct_lambda(s,x): et

我试图计算任意字符串,以了解它们是否是有效的Python函数定义

我首先运行了这个测试:

i1 = "def z(a): return a"
exec(i1)
i2 = "def z(a): eturn a"
exec(i2)
这会引发i2的语法错误。然后我试着用我要评估的真实值:

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)
i5=“”def densite_首字母缩写(x):

返回(((x-0.0005)/0.00025)*(1-(x-0.0005)/0.00025))**5)*(x>0.0005)*(x0.0005)*(x
eturn(此处插入表达式)
不是语法错误。解释器假定您正在调用一个名为
eturn
的方法,参数在括号内。当然,该函数不存在,但解释器不会抱怨,直到您实际执行
densite\u initiale

执行(“densite\u initiale(99)”实际上会产生NameError,但我不能这样做,因为在定义中可能有其他变量超出了我当前的作用域(如fct_lambda的xmin),因为它们的格式不是
eturn(此处插入表达式)
。它们后面没有括号。i6具有
标识符(表达式)的格式
,而i2和i4的形式为
标识符标识符
标识符标识符*(表达式)
。第一个是有效语法,后两个不是。