关于python:使用裸露的’except’有什么问题?

What is wrong with using a bare 'except'?

本问题已经有最佳答案,请猛点这里访问。

我尝试使用pyautogui创建一个函数来检查图像是否显示在屏幕上,并得出以下结论:

1
2
3
4
5
6
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是所有"常规"异常的基本类型。

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

捕获您知道如何处理的所有内容,并让其余部分向调用堆栈传播,以查看是否有其他东西可以处理它。在这种情况下,您期望的错误(根据文档)是pyautogui.ImageNotFoundException


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