Цикл выполняется и появляется результат, но выдает ошибку
Я написал код с использованием python tesseract, который переводит номера телефонов с изображения в текст(изображения берутся со списка), и выводит их в порядковом значении:
for i in links:
img = Image.open(i)
text = pytesseract.image_to_string(img,lang=None, config='')
for links in range(len(links)):
print(str(links+1) + ". " + str(text))
Возникает ошибка:
Traceback (most recent call last):
File "D:\pythonProject\test.py", line 13, in <module>
for links in range(len(links)):
TypeError: object of type 'int' has no len()
но при этом код выполняется и выводится желаемый результат перед ошибкой, полностью это выглядит так
1. 8 921 295-18-36
2. 8 921 295-18-36
3. 8 921 295-18-36
Traceback (most recent call last):
File "D:\pythonProject\test.py", line 13, in <module>
for links in range(len(links)):
TypeError: object of type 'int' has no len()
Ответы (2 шт):
Я решил все простым break в первом блоке for:
for i in links:
img = Image.open(i)
text = pytesseract.image_to_string(img,lang=None, config='')
for links in range(len(links)):
print(str(links+1) + ". " + str(text))
break
for links in range(len(links)):
^^^^^ ^^^^^
После первого прохода внешнего цикла у вас в переменной links получается число, потому что вы эту же переменную используете во внутреннем цикле. Я, кажется, понял, что вы хотели сделать, нумерация перебираемых в цикле объектов делается с помощью встроенной функции питона enumerate:
for i, img_link in enumerate(links, 1):
img = Image.open(img_link)
text = pytesseract.image_to_string(img, lang=None, config='')
print(str(i) + ". " + str(text))
В современных версиях питона последний print можно записать проще и понятнее:
print(f'{i}. {text}')