Что плохого в использовании "только"?

Я попытался сделать функцию, чтобы проверить, отображается ли изображение на экране, используя PyAutoGui, и придумал это:

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

И это прекрасно работает, но PyCharm говорит мне, что я не должен уходить except голый. В чем проблема с тем, чтобы оставить это так? Есть ли более подходящий способ создания той же функции?

2 ответа

Голый except будет ловить исключения, которые вы почти наверняка не хотите ловить, в том числе KeyboardInterrupt (пользователь нажимает Ctrl+C) и ошибки, вызванные Python, такие как SystemExit

Если у вас нет конкретного исключения, которое вы ожидаете, по крайней мере except Exception, который является базовым типом для всех "обычных" исключений.


Как говорится: вы используете except блоки для восстановления из известных состояний отказа. Неизвестное состояние сбоя обычно неустранимо, и это правильное поведение для фатального выхода из этих состояний, что, естественно, делает интерпретатор Python с неперехваченным исключением.

Поймай все, что ты умеешь обрабатывать, и позволь остальным распространяться вверх по стеку вызовов, чтобы посмотреть, сможет ли что-то еще с этим справиться. В этом случае ожидаемая вами ошибка (согласно документации) pyautogui.ImageNotFoundException

По сути, вы не пользуетесь языком, чтобы помочь вам найти проблемы. Если вы использовали except Exception as ex: Вы могли бы сделать что-то вроде журнала исключения и точно знать, что произошло.

Другие вопросы по тегам