【问题标题】:Avoid ZeroDivisionError inside a function避免函数内部出现 ZeroDivisionError
【发布时间】:2019-05-18 03:51:20
【问题描述】:

我正在尝试调整一个函数以避免ZeroDivisionError。我尝试过的几种方法都没有奏效,我正在寻求任何帮助。

我已经尝试将以下内容添加到我的代码中:

try:
 try:
 raise Exception("0")

但是,这不起作用,我不确定我还能添加什么。

def complexDivide(list_of_numbers, index):
    denom = list_of_numbers[index]
    return [easyDivide(item, denom) for item in
        list_of_numbers]

def easyDivide(item, denom):
    return item / denom

complexDivide ([0, 2, 4], 0)

目标是在调用 complexDivide 时向提供 [0, 0, 0] 列表的代码添加一些内容。

【问题讨论】:

  • 当你除以零时,计算机应该如何知道你想要什么值?零除法在一般数学中是未定义的。如果您希望在除以零时返回一个值,则必须自己实现。

标签: python python-3.x function exception


【解决方案1】:

如果您希望除以零的结果为零,请这样:

def easyDivide(item, denom):
    return 0 if denom == 0 else item / denom

complexDivide 中做出决定可能比在easyDivide 中更快:

def complexDivide(list_of_numbers, index):
    denom = list_of_numbers[index]
    if denom == 0:
        return [0] * len(list_of_numbers)
    return [easyDivide(item, denom) for item in
        list_of_numbers]

【讨论】:

  • 非常感谢您的帮助。代码在更改时有效,但我仍然没有得到 [0, 0, 0] 的列表,这是我的最终目标。我是否在我的初始代码中遗漏了一些会引发这种情况的内容?
  • 我提供了两个选项。选择一个或另一个。两者都不是必需的。
  • 这是一个链接,显示这两个选项的行为完全符合您的要求:ideone.com/pKnX4U
  • 如果你没有得到你想要的,请说明你得到了什么。
  • @AshutoshMishra 不要滥用正常事件的异常。
【解决方案2】:

您可以将complex_divide函数修改为:

def complex_divide(list_of_numbers, index):
    denominator = list_of_numbers[index]

    if denominator != 0:
        return [item / denominator for item in list_of_numbers]

    return [0 for _ in list_of_numbers]

easy_divide函数可以跳过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2017-09-08
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    相关资源
    最近更新 更多