Python:如何管理零错误

Python:如何管理零错误,python,python-2.7,Python,Python 2.7,我对Python非常陌生,我正在努力解决这个错误,下面是我的代码: new_dictionary = dict(((i,f), abs(int(-d/-(-first_dictionary[i, f]//second_dictionary[i, f])))) for i in I for f in F) 我得到的回报是:ZeroDivisionError:float除以零 我知道发生此错误是因为第一个字典和第二个字典的某些值等于0.0,但我不知道如何管理它 我试图定义此函数: def my_f

我对Python非常陌生,我正在努力解决这个错误,下面是我的代码:

new_dictionary = dict(((i,f), abs(int(-d/-(-first_dictionary[i, f]//second_dictionary[i, f])))) for i in I for f in F)
我得到的回报是:
ZeroDivisionError:float除以零

我知道发生此错误是因为第一个字典和第二个字典的某些值等于0.0,但我不知道如何管理它

我试图定义此函数:

def my_function(dict1, dict2):
    first_dictionary = dict1
    second_dictionary = dict2
    for i in I:
        for f in F:
            if first_dictionary[i, f] == 0 or second_dictionary[i, f] == 0.0:
                new_value = 0
            else:
                new_value = abs(int(-d/-(-first_dictionary[i, f]//second_dictionary[i, f])))
    return new_value


new_dictionary = dict(((i, f), my_function(first_dictionary, second_dictionary)) for i in I for f in F)
但是输出与我期望的不同,它为字典中的所有键提供相同的值

如何解决此错误?提前谢谢

来源-

>>试试:
...     f(0)
... 除零误差外:
...     导入回溯
...     traceback.print_last()
... 
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
您可以使用此选项检查导致错误的第一个实例源-

>>试试:
...     f(0)
... 除零误差外:
...     导入回溯
...     traceback.print_last()
... 
回溯(最近一次呼叫最后一次):
文件“”,第1行,在

您可以使用它来检查导致错误的第一个实例

如果您想要显式检查而不是错误捕获,则不需要执行两个循环:

def safe_division(a, b):
    if not b:
        return 0
    return a / b

new_dictionary = dict(((i,f), abs(int(safe_division(-d, safe_division(-first_dictionary[i, f], second_dictionary[i, f]))))) for i in I for f in F)
事实上,让我们通过听写理解让它变得更好一点:

new_dictionary = {(i, f): abs(int(safe_division(-d, safe_division(-first_dictionary[i, f], second_dictionary[i, f])))) for i in I for f in F}

如果希望显式检查而不是错误捕获,则不需要执行两个循环:

def safe_division(a, b):
    if not b:
        return 0
    return a / b

new_dictionary = dict(((i,f), abs(int(safe_division(-d, safe_division(-first_dictionary[i, f], second_dictionary[i, f]))))) for i in I for f in F)
事实上,让我们通过听写理解让它变得更好一点:

new_dictionary = {(i, f): abs(int(safe_division(-d, safe_division(-first_dictionary[i, f], second_dictionary[i, f])))) for i in I for f in F}

你能分享你的字典值吗?问题会变得更清楚。您是否希望总是覆盖循环中的“新值”?那个么为什么还要费心使用for循环呢?你们能分享你们的字典值吗?问题会变得更清楚。您是否希望总是覆盖循环中的“新值”?那么为什么要费心处理for循环呢?谢谢你的回答,但这会给我返回另一个错误:zerodivision错误:整数除法或模乘零我有一个输入错误,上面的内容永远不应该被零除。谢谢你的回答,现在开始工作了!非常聪明!谢谢你的回答,但这返回给我另一个错误:ZeroDivisionError:整数除法或模乘零我有一个输入错误,上面的内容永远不应该被零除。谢谢你的回答,现在正在工作!非常聪明!