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

Python中如何规避ZeroDivisionError并继续计算薪资平均值

解决薪资平均值计算中的ZeroDivisionError问题

核心问题分析

当某类岗位(比如CT类型的AI Scientist)没有对应薪资数据时,对应的计数变量(如count_ct_ai_scientist)会保持为0,执行除法运算时就会触发ZeroDivisionError。

解决方案

可以通过两种可靠方式处理:

  • 方式一:先判断计数是否大于0再计算平均值
    在计算前检查计数变量是否大于0,避免除以0的情况;如果计数为0,可赋值为提示文本或None。
  • 方式二:用try-except块捕获错误
    将除法运算包裹在try块中,捕获ZeroDivisionError并做针对性处理。

修改后的代码示例

方式一:条件判断实现

ft_ai_scientist = 0
count_ft_ai_scientist = 0 
ct_ai_scientist = 0
count_ct_ai_scientist = 0

with open('/Users/xxx/Desktop/ds_salaries.csv', 'r') as f:
    csv_reader = f.readlines()
    # 跳过CSV表头(如果第一行是表头的话)
    next(csv_reader)
    for row in csv_reader:
        new_row = row.strip().split(',')
        employment_type = new_row[3]
        job_title = new_row[4]
        salary_in_usd = new_row[7]

        if employment_type == 'FT' and job_title == 'AI Scientist':
            ft_ai_scientist += int(salary_in_usd)
            count_ft_ai_scientist += 1

        if employment_type == 'CT' and job_title == 'AI Scientist':
            ct_ai_scientist += int(salary_in_usd)
            count_ct_ai_scientist += 1

# 计算FT岗位平均值
if count_ft_ai_scientist > 0:
    avg_ft_ai_scientist = ft_ai_scientist / count_ft_ai_scientist
else:
    avg_ft_ai_scientist = "无有效薪资数据"

# 计算CT岗位平均值
if count_ct_ai_scientist > 0:
    avg_ct_ai_scientist = ct_ai_scientist / count_ct_ai_scientist
else:
    avg_ct_ai_scientist = "无有效薪资数据"

print(avg_ft_ai_scientist)
print(avg_ct_ai_scientist)

方式二:try-except捕获错误实现

ft_ai_scientist = 0
count_ft_ai_scientist = 0 
ct_ai_scientist = 0
count_ct_ai_scientist = 0

with open('/Users/xxx/Desktop/ds_salaries.csv', 'r') as f:
    csv_reader = f.readlines()
    next(csv_reader)  # 跳过表头
    for row in csv_reader:
        new_row = row.strip().split(',')
        employment_type = new_row[3]
        job_title = new_row[4]
        salary_in_usd = new_row[7]

        if employment_type == 'FT' and job_title == 'AI Scientist':
            ft_ai_scientist += int(salary_in_usd)
            count_ft_ai_scientist += 1

        if employment_type == 'CT' and job_title == 'AI Scientist':
            ct_ai_scientist += int(salary_in_usd)
            count_ct_ai_scientist += 1

# 处理FT岗位平均值计算
try:
    avg_ft_ai_scientist = ft_ai_scientist / count_ft_ai_scientist
except ZeroDivisionError:
    avg_ft_ai_scientist = "无有效薪资数据"

# 处理CT岗位平均值计算
try:
    avg_ct_ai_scientist = ct_ai_scientist / count_ct_ai_scientist
except ZeroDivisionError:
    avg_ct_ai_scientist = "无有效薪资数据"

print(avg_ft_ai_scientist)
print(avg_ct_ai_scientist)

额外优化建议

手动用split(',')处理CSV文件容易出错(比如字段内容包含逗号的情况),建议使用Python内置的csv模块读取数据,代码更健壮:

import csv

ft_ai_scientist = 0
count_ft_ai_scientist = 0 
ct_ai_scientist = 0
count_ct_ai_scientist = 0

with open('/Users/xxx/Desktop/ds_salaries.csv', 'r') as f:
    csv_reader = csv.reader(f)
    next(csv_reader)  # 跳过表头
    for row in csv_reader:
        employment_type = row[3]
        job_title = row[4]
        salary_in_usd = row[7]

        if employment_type == 'FT' and job_title == 'AI Scientist':
            ft_ai_scientist += int(salary_in_usd)
            count_ft_ai_scientist += 1

        if employment_type == 'CT' and job_title == 'AI Scientist':
            ct_ai_scientist += int(salary_in_usd)
            count_ct_ai_scientist += 1

# 用三元运算符简化条件判断
avg_ft_ai_scientist = ft_ai_scientist / count_ft_ai_scientist if count_ft_ai_scientist > 0 else "无有效薪资数据"
avg_ct_ai_scientist = ct_ai_scientist / count_ct_ai_scientist if count_ct_ai_scientist > 0 else "无有效薪资数据"

print(avg_ft_ai_scientist)
print(avg_ct_ai_scientist)

内容的提问来源于stack exchange,提问作者Jean-Paul Azzopardi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:01:08