尝试在运行中调用函数时出现类型错误

Posted

技术标签:

【中文标题】尝试在运行中调用函数时出现类型错误【英文标题】: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) 输入是内置函数。 【参考方案1】:

错误是因为input 是built-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?

以上是关于尝试在运行中调用函数时出现类型错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试从外部模态视图控制器调用视图控制器函数时出现致命错误

当我尝试从 main 调用我的类模板函数时出现错误

调用 list.clear() 时出现运行时错误

通过引用使用函数调用时出现运行时错误?

使用 truffle 在solidity 中调用函数时出现新的 BigNumber() 错误。如何修复错误?

在调用函数中取消引用指针时出现分段错误