提问人:shadow777 提问时间:11/18/2023 更新时间:11/18/2023 访问量:75
Python - eval 方法不需要除以零 [closed]
Python - eval method unwanted division by zero [closed]
问:
我想使用 Python 的 eval 函数来计算以下公式:
eval(nvl(a, b))
简而言之,我想检查两个单独的数学表达式,并在 0 的情况下选择第二个。a
nvl
是我的自定义函数,如下所示:
def nvl(a, b):
try:
evaluated = eval(a)
except:
evaluated = 0
if evaluated == 0:
return eval(b)
else:
return evaluated
每当第一个表达式抛出异常时,我都会挣扎,例如,如果是,那么我的抛出异常而不是返回。a
0/0
eval(nvl(0/0, 1))
1
有什么方法可以改变这种行为并迫使 eval 简单地执行我的方法而不是评估每个参数?
答:
-1赞
GaTe
11/18/2023
#1
它甚至没有达到你的尝试,除非你的除法在函数的参数中
尽你所能,除非你在哪里做你的部门。因此,你必须给你的函数这样的商
def nvl(a, b):
...
return evaluated
def yourDivision(a,b):
return a/b
try:
a = yourDivision(x, y)
evaluated = nvl(a, b)
except ZeroDivisionError:
evaluated = 0
0赞
Suramuthu R
11/18/2023
#2
我假设 a 是表达式 1,b 是表达式 2。而且每个表达式中几乎没有其他变量
我的建议是:将表达式 1 拆分为分子和分母。例如,如果表达式 1 为 2x/y+6,则可以按如下方式声明:
Nr = 2*x
Dr = y+6
如果表达式 1 仍然很复杂,例如 (2x/(y+4)) + (3x/(y-5)),即使这样,您也可以按如下方式拆分:
Nr = (2*x*(y-5)) + (3*x*(y+4))
Dr = (y+4)*(y-5)
现在,您可以将条件声明为:
if Nr == 0 or Dr == 0: return eval(b)
评论
eval
a
b
eval(nvl(a, b))
nvl
eval(nvl(0/0, 1))
nvl
nvl
0/0
a
1
b
nvl("0/0", "1")
nvl(0/0, 1)
eval
except