当发生0/0时,如何避免使用小数函数失败



我有一个python 2.7脚本,它使用两个列表并将数字划分为彼此,然后创建一个带有结果的新列表,并且它可以正常工作,但是它随时都在以下行中错误该脚本必须划分0/0,这有时会根据我当前服务器的状态而发生。有什么办法避免这种情况吗?

complist =[a, b, c]
totallist=[d, e, f]
percentlist = [Decimal(c) / Decimal(t) * 100 for c,t in zip(complist, totallist)] 

我遇到了错误:

    MacBook-Pro-3$ python dailyReport.py 
    Traceback (most recent call last):
  File "dailyReport.py", line 67, in <module>
    percentlist = [Decimal(l) / Decimal(t) * 100 for l,t in zip(complist, totallist)] 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/decimal.py", line 1321, in __truediv__
    return context._raise_error(DivisionUndefined, '0 / 0')
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/decimal.py", line 3873, in _raise_error
    raise error(explanation)
decimal.InvalidOperation: 0 / 0

怎么样
percentlist = [0 if t == 0 else Decimal(c) / Decimal(t) * 100 for c,t in zip(complist, totallist)]

我去了https://www.repl.it并尝试了您的代码。通常,我认为Python允许零分配。我尝试了您的代码和打印(0/0(,然后返回错误

使用tryexcept

try:
    complist =[a, b, c]
    totallist=[d, e, f]
    percentlist = [Decimal(c) / Decimal(t) * 100 for c,t in zip(complist, totallist)]
except decimal.InvalidOperation:
    print 'divide by zero error'

编辑

如果要在新列表中添加它。

newlist = []
try:
    complist =[a, b, c]
    totallist=[d, e, f]
    percentlist = [Decimal(c) / Decimal(t) * 100 for c,t in zip(complist, totallist)]
except decimal.InvalidOperation:
    newlist.append(0)

最新更新