Возникновение ошибок: некрасивый код ... Лучший способ написать? - PullRequest
1 голос
/ 19 сентября 2019
def positive_int(value):
    try:
        ivalue = int(value)
    except:
        raise argparse.ArgumentTypeError("%s is an invalid positive int value" % value)
    if ivalue <= 0:
        raise argparse.ArgumentTypeError("%s is an invalid positive int value" % value)
    return ivalue

Просто подумайте, что приведенный выше код ужасно уродлив.Первая часть вызывает ошибки, а другая - проверка, является ли значение выполнимым.Ошибка должна быть поднята, если хотя бы один из них выходит из строя.Есть ли способ связать их в проверки вместе, чтобы мне не нужно было повторять строки?Или просто лучшая альтернатива в целом?Большое спасибо:)

1 Ответ

1 голос
/ 19 сентября 2019

Это вызовет универсальное исключение, если значение будет отрицательным внутри блока try:, что вызовет повторное возникновение того же исключения, как если бы int(value) вызвало исключение

def positive_int(value):
    try:
        ivalue = int(value)
        if ivalue <= 0:
            raise Exception
    except:
        raise argparse.ArgumentTypeError("%s is an invalid positive int value" % value)

    return ivalue
...