You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python库调用触发ZeroDivisionError问题排查求助

问题解决:ZeroDivisionError 处理方案

问题根源

你当前的代码在user_data函数初始化运算结果字典时,会立即执行所有四则运算,包括lib.division(first_number, second_number)。这意味着只要第二个数字为0,不管用户后续是否选择除法选项,程序都会在字典创建阶段直接触发ZeroDivisionError,而你放在menu_selection选项4中的try-except根本没机会生效。

解决方案(无需修改自定义库)

方案1:延迟运算执行(推荐)

修改字典的存储逻辑,不直接存储运算结果,而是存储带参数的可调用对象,只在用户选择对应选项时才执行运算:

修改user_data中的字典定义:

dictionary = {
    'add': lambda: lib.addition(first_number, second_number),
    'sub': lambda: lib.subtraction(first_number, second_number),
    'mult': lambda: lib.multiply(first_number, second_number),
    'div': lambda: lib.division(first_number, second_number)
}

修改menu_selection中的选项调用逻辑:

if user_option == '1':
    print(first_number, '+', second_number, "=", dictionary['add']())
elif user_option == '2':
    print(first_number, '-', second_number, "=", dictionary['sub']())
elif user_option == '3':
    print(first_number, '*', second_number, "=", dictionary['mult']())
elif user_option == '4':
    try:
        print(first_number, '/', second_number, "=", dictionary['div']())
    except ZeroDivisionError:
        print("不能除以0")

这样只有当用户主动选择除法选项时,才会执行除法运算,此时try-except可以正常捕获错误。

方案2:提前捕获除法错误

在user_data函数中创建字典时,单独对除法运算做异常捕获,标记错误状态:

修改user_data中的字典创建部分:

# 先初始化其他运算结果
dictionary = {
    'add': lib.addition(first_number, second_number),
    'sub': lib.subtraction(first_number, second_number),
    'mult': lib.multiply(first_number, second_number)
}
# 单独处理除法,捕获错误
try:
    dictionary['div'] = lib.division(first_number, second_number)
except ZeroDivisionError:
    dictionary['div'] = 'error_zero_div'  # 用特殊值标记错误

修改menu_selection中的选项4:

elif user_option == '4':
    if dictionary['div'] == 'error_zero_div':
        print("不能除以0")
    else:
        print(first_number, '/', second_number, "=", dictionary['div'])

额外注意事项

  1. 你的自定义库中allinone函数存在语法问题:它没有return语句,调用时会返回None。如果允许修改库(仅修复返回逻辑,不添加异常处理),可以修改为:
def allinone(first_number, second_number):
    return (
        addition(first_number, second_number),
        subtraction(first_number, second_number),
        multiply(first_number, second_number),
        division(first_number, second_number)
    )
  1. week_5函数中的异常处理是有效的,无需修改。

内容的提问来源于stack exchange,提问作者Mr.Truth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 09:18:28