Попробуй кроме как в цикле while - python
Прежде чем объяснить свой вопрос, я делюсь своим кодом, чтобы было легче начать прямо оттуда.
import matplotlib.pylab as plt
import os
while True:
try:
img_name = input('Enter the image file name: ')
img = plt.imread(os.path.join(work_dir, 'new_images_from_web\\', img_name + '.jpg'))
except FileNotFoundError:
print('Entered image name does not exist.')
img_name = input('Please enter another image file name: ')
img = plt.imread(os.path.join(work_dir, 'new_images_from_web\\', img_name + '.jpg'))
Я хотел бы, чтобы пользователь вводил имя файла изображения, и всякий раз, когда файл не существует в каталоге, я хочу, чтобы пользователь вводил другое имя файла вместо получения сообщения об ошибке, подобного следующему:
FileNotFoundError: [Errno 2] No such file or directory:
На самом деле, с кодом выше, после второго ошибочного ввода я получаю сообщение об ошибке с исключением FileNotFoundError
в то время как я хотел бы, чтобы цикл продолжался до тех пор, пока существующее имя файла не будет введено в качестве входных данных. Что я делаю не так в while
цикл или в остальной части кода?
2 ответа
Если exception
происходит за пределами try: except:
это приведет к краху вашей программы. Задавая новый вход после except:
вы находитесь вне контекста захвата: в результате происходит сбой вашей программы.
Исправить:
import matplotlib.pylab as plt
import os
while True:
try:
img_name = input('Enter the image file name: ')
img = plt.imread(os.path.join(work_dir, 'new_images_from_web\\', img_name + '.jpg'))
if img is None:
print("Problem loading image")
else:
break
except FileNotFoundError:
print('Entered image name does not exist.')
# or check img here if you allow a None image to "break" from above
if img:
# do smth with img if not None
Важно также проверить / обработать None
так как imread()
может вернуть None
если возникают проблемы с загрузкой изображения (файл существует / поврежден... или.txt)
Это помогает!
while Ture:
try:
img_name = input('Enter the image file name: ')
img = plt.imread(os.path.join(work_dir, 'new_images_from_web\\', img_name + '.jpg'))
if not img:
print("Err")
else:
break
except FileNotFoundError:
print('Entered image name does not exist.')
else:
break