Actuellement, je travaille sur une application Web, où je suis tombé sur le problème, qu'une fonction doit gérer plusieurs entrées, mais un certain nombre d'entre elles peuvent être None (ou provoquer une autre erreur d'ailleurs):

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

Quelle serait la façon la plus élégante de gérer cela? Le simple fait d'écrire tous les cas serait certainement une option.

Au plaisir d'apprendre quelque chose et merci beaucoup à l'avance!

1
AlexNe 18 mars 2019 à 12:05

2 réponses

Meilleure réponse

Si le seul cas est que les entrées peuvent être None, vous pouvez attribuer set() vide au lieu de 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)
1
sanyassh 18 mars 2019 à 10:35

Est-ce à la manière de la force brute en tapant tous les cas:

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

Malheureusement, cela échouera avec plus d'entrées utilisées, sice on doit gérer 2 ^ (num_inputs) cas, donc je suis ouvert à de meilleures suggestions.

0
AlexNe 18 mars 2019 à 10:15