Как мне исправить эту ошибку ValueError?

#python #integer #valueerror

#python #целое число #ошибка значения

Вопрос:

Я пытаюсь получить среднее значение из текстового файла, который использует функцию def. Я пытаюсь преобразовать список из текстового файла в int(). Вместо преобразования он выдает ошибку: » Ошибка ValueError: недопустимый литерал для int() с базой 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()
  

Комментарии:

1. В вашем файле более одного числа в каждой строке.

2. Ошибка довольно очевидна, вы не можете перейти '5, 5, 6, 7' к int() , вам нужно будет разделить это.

3. Но ваш код ожидает, что это будет только одно число.

Ответ №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
  

Комментарии:

1. Разве назначение не должно numberList быть после цикла?

2. ДА. Ошибка форматирования. Спасибо, что указали на это.