2017-09-19 2 views
0

Was ist der beste Weg in Python, den Wert von 3 Variablen zurückzugeben, die nicht null ist. Nur 1 der Variablen ist zu keiner Zeit null.Rückgabewert von Variablen, die nicht null ist

so weit ich bin diese nicht effizient Code

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']}) 

Darüber hinaus den Austausch zu tun (basierend auf Ihre Kommentare) können Sie versuchen:

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) 
}) 

weiter auf die Antwort unten bereitgestellt , wenn F06_yes_1 Wert ist Null, und F06_no_1 Wert ist "ein" bekomme ich den folgenden Fehler:

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' 

Antwort

4

T Er oder die Operation wählt den ersten Nicht-None-Wert aus.

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

Darüber hinaus den Austausch zu tun (basierend auf Ihre Kommentare) können Sie versuchen:

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) 
}) 

Sie die KeyError bekommen, weil Sie versuchen, einen Datensatz zum Nachschlagen, das nicht der Fall ist existieren. Um dies eleganter zu handhaben, können Sie die Methode .get mit einem zweiten Argument verwenden, das als Standard-Rückgabewert fungiert, wenn der Schlüssel nicht existiert.

+0

Großartig, danke, sagen wir, der zurückgegebene Wert ist eingeschaltet, wie kann ich es effizient ändern Nein Ja – Ossama

+0

oder am besten, wenn der Wert für das erste Argument zurückgegeben wird, wie kann ich es in Ja und ebenso für die Sekundarstufe ändern Argument, wenn nicht null, wie kann ich von ein zu Nein wechseln, wieder für das dritte Argument von zu NA. – Ossama

+0

@Ossama sehe meinen aktualisierten Beitrag - Sie sollten lieber Ihre Frage mit diesen Kommentaren aktualisieren. –

Verwandte Themen