2016-07-04 14 views
0

私は以下の関数を持っています:dictを読んで、いくつかの値をローカル変数に渡し、それをタプルとして返します。複数のKeyErrorの例外を扱うもっとエレガントな方法

問題は、目的のキーの一部が辞書に存在しない可能性があることです。

これまでのところ、私はこのコードを持っていますが、私がしたいことはしていますが、それを行うもっとエレガントな方法があるのだろうかと思います。

def getNetwork(self, search): 

    data = self.get('ip',search) 
    handle   = data['handle'] 
    name   = data['name'] 
    try: 
     country  = data['country']  
    except KeyError: 
     country = '' 
    try:  
     type   = data['type'] 
    except KeyError: 
     type = '' 
    try:     
     start_addr  = data['startAddress'] 
    except KeyError: 
     start_addr = '' 
    try:     
     end_addr  = data['endAddress'] 
    except KeyError: 
     end_addr = '' 
    try:     
     parent_handle = data['parentHandle'] 
    except KeyError: 
     parent_handle = '' 
    return (handle, name, country, type, start_addr, end_addr, parent_handle) 

私は一種の恐れ多数try: except:によるが、私は、単一のtry: except:内のすべてのaffectationsを置けば、それは最初に欠けているdictのキーにエラーが発生した後の値に影響を与えるために停止します。

あなたが代わりにリストに追加し、失敗に " "を追加し、成功に、各 keyのキーと tryを反復処理でき
+0

あなたのお答えは、両方ともあなた!後でそれをテストします。私は本当に私の問題だったので、私は実際にはget()ソリューションが好きです。文書が立っているので: >キーが辞書にある場合はkeyの値を返し、それ以外の場合はデフォルト値を返します。 defaultが指定されていない場合は、デフォルトでNoneに設定されるため、このメソッドはKeyErrorを発生させません。 –

答えて

2

dict.getを使用してください。それぞれの使用:

try: 
    country  = data['country']  
except KeyError: 
    country = '' 

を等価的に置き換えることができます。def

:あなたは私が読むことを実際より快適で、次のコード、に行って答えると、

country = data.get('country', '') 
1

ret = [] 
for key in {'country', 'type', 'startAddress', 'endAddress', 'parentHandle'}: 
    try: 
     ret.append(data[key]) 
    except KeyError: 
     ret.append([" "]) 

次に、関数の最後にタプルを返す:

return tuple(ret) 

これが必要な場合。

0

ThxをShadowRanger getNetwork(自己検索):

data = self.get('ip',search) 
handle   = data.get('handle', '') 
name   = data.get('name', '') 
country  = data.get('country','') 
type   = data.get('type','') 
start_addr  = data.get('start_addr','') 
end_addr  = data.get('end_addr','') 
parent_handle = data.get('parent_handle','') 
return (handle, name, country, type, start_addr, end_addr, parent_handle) 
関連する問題