2017-09-19 1 views
0

Quelle est la meilleure façon pour Python de renvoyer la valeur de 3 variables, ce qui n'est pas NULL. seulement 1 de la variable ne sera pas nulle à tout moment.Valeur de retour des variables qui n'est pas nulle

Jusqu'à présent, je suis en utilisant ce code non efficace

if kwargs.get('F06_yes_1'): 
    context1.update({'F06_1': kwargs['F06_yes_1']}) 
elif kwargs.get('F06_no_1'): 
    context1.update({'F06_1': kwargs['F06_no_1']}) 
else: 
    context1.update({'F06_1': kwargs['F06_na_1']}) 

De plus, pour faire le remplacement (en fonction de vos commentaires), vous pouvez essayer:

context1.update({ 
    'F06_1': ('yes' if kwargs['F06_yes_1'] else None) 
      or ('no' if kwargs['F06_no_1'] else None) 
      or ('n/a' if kwargs['F06_na_1'] else None) 
}) 

suite à la réponse fournie ci-dessous , lorsque la valeur F06_yes_1 est nulle et que la valeur F06_no_1 est "activée", j'obtiens l'erreur suivante:

Traceback (most recent call last): 
    File "C:\Python27\lib\site-packages\cherrypy\_cprequest.py", line 670, in respond 
    response.body = self.handler() 
    File "C:\Python27\lib\site-packages\cherrypy\lib\encoding.py", line 217, in __call__ 
    self.body = self.oldhandler(*args, **kwargs) 
    File "C:\Python27\lib\site-packages\cherrypy\_cpdispatch.py", line 60, in __call__ 
    return self.callable(*self.args, **self.kwargs) 
    File "example.py", line 872, in RPC_submit 
    'F06_1': ('yes' if kwargs['F06_yes_1'] else None) 
KeyError: 'F06_yes_1' 

Répondre

4

T L'opération sélectionnera la première valeur non-nulle.

context1.update({ 
    'F06_1': kwargs['F06_yes_1'] 
      or kwargs['F06_no_1'] 
      or kwargs['F06_na_1'] 
}) 

De plus, pour faire le remplacement (en fonction de vos commentaires), vous pouvez essayer:

context1.update({ 
    'F06_1': ('yes' if kwargs.get('F06_yes_1', None) else None) 
      or ('no' if kwargs.get('F06_no_1', None) else None) 
      or ('n/a' if kwargs.get('F06_na_1', None) else None) 
}) 

Vous obtenez le KeyError parce que vous essayez de rechercher un dossier qui ne exister. Pour gérer cela plus élégamment, vous pouvez utiliser la méthode .get avec un second argument qui agit comme valeur de retour par défaut si la clé n'existe pas.

+0

Excellent, merci, disons que la valeur retournée est activée, comment puis-je la changer efficacement non Oui – Ossama

+0

ou mieux, si la valeur renvoyée pour l'argument fist est activée, comment puis-je la changer pour yes et de même pour la seconf argument sinon null, comment puis-je passer de non à, encore une fois pour le troisième argument de sur NA. – Ossama

+0

@Ossama voir ma mise à jour - vous devriez plutôt mettre à jour votre question avec ces commentaires. –