Ошибка, вызванная функцией chr () в графическом конвертере ASCII-файлов

#python #python-3.x

#python #python-3.x

Вопрос:

Пока это мой код:

 readFile = open("ascii_vals.txt", 'r')
writeFile = open("ascii_art.txt", 'w')
EOF = False

while not EOF:
    line = readFile.readline()
    if line == "":
      EOF = True
    else:
        for char in list(line):
            art = chr(int(line))
            writeFile.write(art)
  

Целью этой программы является преобразование файла чисел в формат ASCII. Моя первая проблема заключается в том, что я получаю эту ошибку:

 Traceback (most recent call last):
 File "C:/Users/Ethan/Desktop/EthanWork/Python/Python Projects/Uni 
Work/asciiNumToChar/Main.py", line 14, in <module>
  art = chr(int(line))
ValueError: invalid literal for int() with base 10: '51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,51,53,44,5
  

Во-вторых, при использовании for char in list(line) он работает только с одной цифрой. Например, если используется число 51, оно разбивается на 5 и 1, я не хочу этого, поскольку они дадут другой результат, если будут использоваться в chr() функции

Любая помощь была бы высоко оценена.

Ответ №1:

Две ошибки:

 for char in list(line):
  

line в нем есть запятые. Вы должны разделить это на запятые. Вызов list этого не сделает. Вместо:

 for char in line.strip().split(",")
  

И в следующей строке:

     art = chr(int(line))
  

вы должны преобразовывать char в int , а не всю строку.

     art = chr(int(char))
  

Но это все равно может привести к сбою, если у вас есть данные, которые не совсем так верны, как вы думаете. Чтобы предотвратить это:

     try:
        art = chr(int(char))
    except ValueError:
        art = " "
        print ("Invalid data in this line:", line)
  

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

1. Спасибо за вашу помощь, я внес эти изменения, и когда я использую цикл for, а затем пытаюсь напечатать char, он выдает ожидаемые результаты (53 52 56 и т.д.), Но когда я добавляю бит art =, который он выдает, выдает ошибку. Ошибка значения: недопустимый литерал для int() с основанием 10: ‘

2. нужно ли мне добавить еще один цикл for, чтобы удалить «из списка чисел?

3. У меня нет ваших данных, поэтому я не могу это проверить, но похоже, что где-то в вашем файле у вас есть пара запятых без числа между ними, или завершающая запятая в конце строки, или пробел перед запятой. Я отредактировал ответ, чтобы поместить ловушку для этого.