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
相关产品推荐
相关产品推荐

