使用裸 'except' 有什么问题?

What is wrong with using a bare 'except'?

我尝试使用 PyAutoGui 创建一个函数来检查屏幕上是否显示了图像,并想出了这个:

def check_image_on_screen(image):
    try:
        pyautogui.locateCenterOnScreen(image)
        return True
    except:
        return False

它工作正常,但 PyCharm 告诉我我不应该让 except 空着。就这样放着有什么问题吗?有没有更合适的方法来创建相同的功能?

Bare except 将捕获您几乎肯定不想捕获的异常,包括 KeyboardInterrupt(用户按 Ctrl+C)和 Python 引发的错误,例如 SystemExit

如果您没有预期的特定异常,至少 except Exception,这是所有 "Regular" 异常的基本类型。


也就是说:您使用 except 块从已知故障状态中恢复。未知的失败状态通常是不可恢复的,正确的行为 致命地退出这些状态,这是 Python 解释器在未捕获异常时自然会做的事情。

抓住你知道如何处理的所有事情,让其余的传播到调用堆栈,看看是否有其他东西可以处理它。在这种情况下,您预期的错误(根据 the docs)是 pyautogui.ImageNotFoundException

基本上,您没有利用语言来帮助您发现问题。如果您使用 except Exception as ex:,您可以做一些事情,比如记录异常并确切知道发生了什么。