【问题标题】:How do I fix this ValueError?如何修复此 ValueError?
【发布时间】:2021-01-29 02:27:09
【问题描述】:

我正在尝试从使用 def 函数的文本文件中获取平均值。我正在尝试将列表从文本文件转换为 int()。而不是转换它给了我错误:“ ValueError: invalid literal for int() with base 10: '5, 5, 6, 7' ”。 “5、5、6、7”是我从正确的 .txt 文件中制作的。代码如下:

def getNumberList(filename):
    with open(filename,'r') as f:
        lyst = f.read().split('\n')
        numberList = [int(num) for num in lyst]
    return numberList

def getAverage(filename, func):
    numbers = func(filename)
    return sum(numbers)/len(numbers)

def main():
    filename = input("Input the file name: ")
    average = getAverage(filename, getNumberList)
    print(average)

if __name__ == "__main__":
    main()

【问题讨论】:

  • 您的文件每一行都有多个数字。
  • 错误很明显,你不能将'5, 5, 6, 7'传递给int(),你需要拆分它。
  • 但是您的代码希望它只是一个数字。

标签: python integer valueerror


【解决方案1】:

您正在按行拆分,但您没有按逗号拆分,因此您试图将5,5,6,7 转换为整数,这是不可能的。如果您想平均文件中的所有数字,您还需要在按行拆分后用逗号拆分,然后将它们组合成一个列表。以下应该有效:

def getNumberList(filename):
    with open(filename,'r') as f:
        lines = f.readlines()
        numberList = [int(num) for num in line.split(',') for line in lines]
    return numberList

【讨论】:

    【解决方案2】:

    看起来您可能需要使用“,”将每个元素与 lyst 分开,因为现在它正在尝试转换具有“1,2,3”作为输入的每一行。

    所以,改一下试试。

    def getNumberList(filename):
        with open(filename,'r') as f:
            lyst = []
            temp = f.read().strip().split('\n')
            for i in temp:
                lyst += i.strip().split(',')
            numberList = [int(num) for num in lyst]
        return numberList
    

    【讨论】:

    • numberList 的赋值不应该在循环之后吗?
    • 是的。格式错误。感谢您指出。
    猜你喜欢
    • 2021-08-13
    • 2020-04-01
    • 2020-10-02
    • 2021-01-20
    • 2022-01-11
    • 2010-12-22
    • 2011-12-30
    • 1970-01-01
    相关资源
    最近更新 更多