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

Python获取NHL数据写入CSV时遇ZeroDivisionError,求异常捕获方案

解决NHL数据处理中的ZeroDivisionError问题

你遇到的这个ZeroDivisionError原因很明确——就是在计算item['shotsAgainst']/item['goalsAgainst']时,某个数据条目的goalsAgainst(失球数)是0,导致除法运算直接报错中断了程序。接下来我给你两种具体的解决思路,直接对应你第55行的代码修改:

方法一:用try/except捕获异常(直接包裹出错的计算逻辑)

既然问题出在那一行的除法运算上,你只需要把那行计算代码放在try块里,然后用except ZeroDivisionError来处理异常情况。比如:

假设你原来的代码是这样的:

# 第55行的出错代码
calculated_value = item['shotsAgainst']/item['goalsAgainst'] + item['shotsAgainst']

修改成:

try:
    calculated_value = item['shotsAgainst']/item['goalsAgainst'] + item['shotsAgainst']
except ZeroDivisionError:
    # 这里根据你的业务需求处理:比如给个默认值,或者跳过当前条目
    print(f"发现失球数为0的条目,跳过计算:{item}")
    calculated_value = 0  # 或者设为None,或者用其他符合业务逻辑的值
    # 如果不想处理这个条目,直接跳过后续写入CSV的步骤,就用continue(如果是在循环里的话)
    # continue

方法二:提前判断分母是否为0(主动避免异常)

另一种更直观的方式是先检查goalsAgainst的值,如果是0就提前处理,不用等到报错。示例代码:

shots_against = item['shotsAgainst']
goals_against = item['goalsAgainst']

if goals_against == 0:
    # 自定义处理逻辑
    print("该条目失球数为0,无法进行除法计算")
    calculated_value = shots_against  # 比如直接用射门数作为替代值,或者设为None
else:
    calculated_value = shots_against / goals_against + shots_against

放置位置说明

因为报错发生在遍历处理每个NHL数据条目的过程中,你需要把上面的代码放在处理单个item的循环内部——也就是你原来写第55行代码的位置,替换掉原来的计算语句就行。这样程序遇到失球数为0的条目时,会执行你定义的异常处理逻辑,而不是直接崩溃,就能完整跑完所有数据了。

内容的提问来源于stack exchange,提问作者Michael T Johnson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:53:54