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光着。像这样离开有什么问题?是否有更合适的方法来创建相同的函数?
- 另请参见stackoverflow.com/q/4990718/20670
- 维基百科对此有一些很好的信息,这叫做错误隐藏。
- 我不确定这是那个的复制品。这是在问"为什么不裸露,除非",而那是在问"我如何裸露,除非"。一个好的答案对于后者可能回答前者,但这不是一个复制品。
bare except将捕获您几乎肯定不想捕获的异常,包括KeyboardInterrupt(用户点击ctrl+c)和python引发的错误,如SystemExit。
如果您没有预期的特定异常,那么至少except Exception是所有"常规"异常的基本类型。
也就是说:使用except块从已知的故障状态中恢复。未知的失败状态通常是不可恢复的,在这些状态下致命地退出是正确的行为,这是Python解释器在未捕获的异常下自然执行的操作。
捕获您知道如何处理的所有内容,并让其余部分向调用堆栈传播,以查看是否有其他东西可以处理它。在这种情况下,您期望的错误(根据文档)是pyautogui.ImageNotFoundException。
基本上,你不会利用语言来帮助你发现问题。如果使用except Exception as ex:,您可以做一些类似于记录异常的事情,并确切知道发生了什么。