尝试在 while 循环中除外 - python

try except in a while loop - 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 循环或其余代码中做错了什么?

如果 exception 发生在 try: except: 之外,它会使您的程序崩溃。通过在 except: 之后询问新的输入,您处于捕获之外-"context":导致您的程序崩溃。

修复:

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

check/handle img 也很重要 None 因为 imread() 可以 return 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