【问题标题】:TypeError when trying to call functions in run尝试在运行中调用函数时出现类型错误
【发布时间】:2022-01-11 08:03:03
【问题描述】:

编辑;感谢大家!它现在可以工作了!

我正在尝试制作一个读取 csv 文件并使用该数据进行计算的程序。我的csv_reader 函数和average_temperature 函数独立工作,但我不明白如何在run() 函数中调用它们。

我理解错误的含义,但我完全不知道如何修复它,但这是我得到的最接近的。它以这个错误结束,然后下面是代码:

Traceback (most recent call last):
  File "main.py", line 100, in <module>
    run()
  File "main.py", line 82, in run
    avgfile = average_temperature("Temperatures.csv", input)
  File "main.py", line 40, in average_temperature
    if filter in row[date_index]:
TypeError: 'in <string>' requires string as left operand, not builtin_function_or_method

代码:

import csv


date_index = 0
temp_index = 2


def csv_reader(file):
    lst = []
    with open("Temperatures.csv", 'r') as weather_file:
        weather_reader = csv.reader(weather_file)
        first_row = True
        for row in weather_reader:
            if first_row:
                first_row = False
                continue
            lst.append(row)
    return lst

def average_temperature(weather, filter):
    thefile = csv_reader("Temperatures.csv")
    sum = 0
    len = 0
    for row in thefile:
        if filter in row[date_index]:
            sum += float(row[temp_index])
            len += 1
    avg = sum / len
    return avg

def run():
    thefile = csv_reader("Temperatures.csv")
    avgfile = average_temperature("Temperatures.csv", input)

    print("{}".format(avgfile))

    return

if __name__ == '__main__':
    run()

【问题讨论】:

  • avgfile = average_temperature("Temperatures.csv", input) 输入是内置函数。

标签: python csv typeerror


【解决方案1】:

错误是因为inputbuilt-in function 的名称。我认为您需要做的是 call 它并获取一个值作为 filter 参数传递给您的 average_temperature() 函数,如下所示:

def run():
    date_filter = input('What date? ')  # Get value from user.
    thefile = csv_reader("Temperatures.csv")
    avgfile = average_temperature("Temperatures.csv", date_filter)

    print("{}".format(avgfile))

    return

【讨论】:

  • 另外,鉴于从未使用过thefile 并且average_temperature 无论如何都会打开Temperatures.csv,您可以放弃对csv_reader 的调用。或者更好的是,将thefile 传递给average_temperature(重写函数以接受类似文件的对象或可迭代对象而不是文件名)。
  • @Breezy:如果它回答了您的问题并帮助您解决了问题,请接受我的回答。见How does accepting an answer work?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 2011-12-02
  • 2019-04-13
  • 2022-01-24
  • 2022-01-07
  • 2021-09-22
相关资源
最近更新 更多