使用裸 '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:
,您可以做一些事情,比如记录异常并确切知道发生了什么。
我尝试使用 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:
,您可以做一些事情,比如记录异常并确切知道发生了什么。