2017-09-19 17 views
0

3つの変数の値を返すためのPythonの最良の方法は、nullではありません。 変数の1つだけはいつでもnullになりません。nullでない変数の戻り値

これまでのところ、私はさらに

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

この非効率的なコードを使用して、(あなたのコメントに基づいて)の交換を行うために、あなたが試すことができています:

以下に答えるために、さらに
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) 
}) 

F06_yes_1の値がnullで、F06_no_1の値が「オン」の場合、次のエラーが発生します。

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' 

答えて

4

T彼またはオペレーションは最初の非None値を選択します。

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

さらに、(あなたのコメントに基づいて)の交換を行うために、あなたが試すことができます:

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

あなたがない、レコードを検索しようとしているので、あなたはKeyError例外を取得しています存在する。これをよりうまく処理するには、.getメソッドをキーが存在しない場合のデフォルトの戻り値として機能する2番目の引数とともに使用します。

+0

返された値がオンであるとしましょう。効率的にそれを変更する方法はありません。はい – Ossama

+0

または最高、拳の引数の値が返された場合、どうすれば変更できますか? NAでない場合の引数、onからNAへの3番目の引数については、どのようにしてOnからNoに変更できますか? – Ossama

+0

@Ossamaは私の更新された投稿を参照してください。 –

関連する問題