在等式之间避免zerodivisionerror

时间:2017-06-30 17:45:21

标签: python python-2.7

在优化问题中,如果下面给出的代码中的函数zero(x ,y)是目标函数,初始值为x,y0,0。那么,要解决问题,我需要计算OBJ。功能以及它的衍生。所以,当我这样做时,我得到ZeroDivisionError: division by zero

[x,y] = [0,0]
def zero(x ,y):
    return 3 + x/y + 2*xy + 1/x

输出是:

 Traceback (most recent call last):
  File "<ipython-input-5-4e3e5e87c5f1>", line 1, in <module>
    runfile('C:/Users/HP/Documents/Python Scripts/Python Scripts_majrpjct/working/practice_cvxopt.py', wdir='C:/Users/HP/Documents/Python Scripts/Python Scripts_majrpjct/working')
  File "C:\ProgramData\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
    execfile(filename, namespace)
  File "C:\ProgramData\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 87, in execfile
    exec(compile(scripttext, filename, 'exec'), glob, loc)
  File "C:/Users/HP/Documents/Python Scripts/Python Scripts_majrpjct/working/practice_cvxopt.py", line 394, in <module>
    print   zero(x,y)
  File "C:/Users/HP/Documents/Python Scripts/Python Scripts_majrpjct/working/practice_cvxopt.py", line 392, in zero
    return 3 + x/y
ZeroDivisionError: division by zero

任何人都可以建议我一个解决方案,以便通过忽略ZeroDivisionError值来获得正确答案。

2 个答案:

答案 0 :(得分:2)

这就是try块的用途!如果你不想消毒你的输入,并且编码为零除零的情况(另一个选项是无穷大,这使得一些更有趣的数学运算),那么一个简单的尝试块是要走的路。如果您需要精确度,请清理输入(确保在将其发送到函数之前y不为零)。

代码:

def zero(x ,y):
    try:
        return 3 + x/y
    except ZeroDivisionError:
        return 3
        #  or do whatever else you want to do when y is zero. 

答案 1 :(得分:0)

这个怎么样:

def zero(x, y):
    if abs(x) < 1e-10 and abs(y) < 1e-10:
        return 3.0
    elif abs(y) < 1e-10:
        return 0.0
    else:
        return 3 + x/y