Чистая обработка TypeErrors нескольких переменных - PullRequest
1 голос
/ 18 марта 2019

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

def my_func(input_1: set, input_2: set, input_3: set): -> set
    return input_1 | input_2 | input_3

Какой самый элегантный способ справиться с этим?Просто выписать все случаи было бы неплохо.

С нетерпением ждем, чтобы чему-то научиться, и большое спасибо заранее!

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Если единственным случаем является то, что входы могут быть None, вы можете назначить пустое set() вместо None:

def my_func(input_1: set, input_2: set, input_3: set) -> set:
    inputs = (
        input_1 or set(), 
        input_2 or set(),
        input_3 or set()
    )

    return set.union(*inputs)
0 голосов
/ 18 марта 2019

Сделал это методом грубой силы, набрав все случаи:

def my_func(input_1, input_2, input_3):
    types = (
        type(input_1),
        type(input_2),
        type(input_3),
        )

    if not all(types):
        return None
    elif not (types[0] and types[1]):
        return input_3
    elif not (types[0] and types[2]):
        return input_2
    elif not (types[1] and types[2]):
        return imput_1
    elif not types[0]:
        return input_2 | input_3
    elif not types[1]:
       return input_1 | input_3
    elif not types[2]:
        return input_1 | input_2
    else:
        return input_1 | input_2 | input_3

К сожалению, это не удастся при использовании большего количества входных данных, так как нужно обработать 2 ^ (num_inputs) случая, поэтомуЯ открыт для лучших предложений.

...