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

Python在run()函数内调用自定义函数触发TypeError如何解决

问题修复方案

报错根因

你遇到的类型错误核心原因是:在run()函数调用average_temperature时,第二个参数直接传入了input,这是Python的内置输入函数对象,并非你需要用来过滤日期的字符串值。如果你是想要获取用户输入的过滤关键词,应该写为input("请输入过滤关键词:"),带括号才是执行函数获取返回的字符串值,直接写input传的是函数本身。代码执行到if filter in row[date_index]判断逻辑时,尝试用函数对象匹配字符串,不符合in操作符的运算要求,因此抛出报错。

其他可优化的冗余问题

  • csv_reader定义了入参file,但函数内部硬编码读取"Temperatures.csv",参数未生效
  • average_temperature定义了第一个入参weather,但内部未使用,还重复调用csv_reader读取文件,run()中提前读取的文件结果完全浪费,存在冗余IO
  • 不要用sum、len这类Python内置函数名作为自定义变量名,避免覆盖原有功能引发后续异常
  • 没有做空数据判断,匹配不到符合条件的记录时会触发除零报错

修复后代码

import csv


date_index = 0
temp_index = 2


def csv_reader(file_path):
    lst = []
    # 用传入的参数读取文件,取消硬编码
    with open(file_path, 'r') as weather_file:
        weather_reader = csv.reader(weather_file)
        # 简化表头跳过逻辑
        next(weather_reader)
        for row in weather_reader:
            lst.append(row)
    return lst

def average_temperature(weather_data, filter_str):
    temp_sum = 0
    count = 0
    for row in weather_data:
        if filter_str in row[date_index]:
            temp_sum += float(row[temp_index])
            count += 1
    # 新增除零保护
    return temp_sum / count if count != 0 else 0

def run():
    # 只读取一次文件,复用结果减少IO
    weather_data = csv_reader("Temperatures.csv")
    # 按需替换为你要过滤的日期关键词,比如筛选2024年数据就填"2024"
    # 如果需要用户手动输入,改为 filter_str = input("请输入要过滤的日期关键词:")
    filter_str = "2024"
    avg_temp = average_temperature(weather_data, filter_str)

    print(f"平均温度为:{avg_temp}")

if __name__ == '__main__':
    run()

内容的提问来源于stack exchange,提问作者Breezy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:15:04