Утверждения в готовом скрипте? - PullRequest
0 голосов
/ 20 июня 2020

Я только что закончил сценарий свертки для изображений.

Теперь моя функция выглядит так:

def conv(image: np.ndarray,
         conv: np.ndarray, *args):

    assert 1 < image.ndim < 4, "error0"
    assert conv.ndim is 2, "error1"
    xconv, yconv = conv.shape
    assert xconv == yconv and xconv % 2, "error2"
    # computations

Если какое-либо из этих утверждений не выполняется, значит, ввод неверен и большинство возможно, функция выдаст ошибку.

Хотя пользователь не сможет понять, что не так, плюс задержка, пока не дойдет до ошибки.

Я везде читал, что assert - это используется для отладки. Что лучше «замедлять» мой алгоритм каждый раз, когда он работает, чем более медленные и недокументированные ошибки (он должен ссылаться на строку документации)? Какая практика наиболее распространена в таких случаях?

1 Ответ

1 голос
/ 20 июня 2020

Какая практика наиболее распространена в этих случаях?

Вы можете raise Exception с кратким описанием того, почему это произошло, поэтому в вашем случае, например, вы можете сделать:

if not 1 < image.ndim < 4:
    raise Exception("Incorrect number of dimensions")

вместо

assert 1 < image.ndim < 4, "error0"

Обратите внимание на not (отрицание согласия). Для получения дополнительных данных см. документацию по ошибкам и исключениям .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...