Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 处理多个KeyError异常的更优雅的方法_Python_Json_Python 3.x_Rdap - Fatal编程技术网

Python 处理多个KeyError异常的更优雅的方法

Python 处理多个KeyError异常的更优雅的方法,python,json,python-3.x,rdap,Python,Json,Python 3.x,Rdap,我有以下函数,它读取一个dict,并将一些值影响到局部变量,然后作为元组返回 问题是字典中可能不存在某些所需的键 到目前为止,我有这个代码,它做我想要的,但我想知道是否有一个更优雅的方式来做到这一点 def getNetwork(self, search): data = self.get('ip',search) handle = data['handle'] name = data['name'] try:

我有以下函数,它读取一个
dict
,并将一些值影响到局部变量,然后作为元组返回

问题是字典中可能不存在某些所需的键

到目前为止,我有这个代码,它做我想要的,但我想知道是否有一个更优雅的方式来做到这一点

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:
中,一旦第一个缺少的dict键出现错误,它就会停止影响值。

你可以迭代这些键,然后对每个
键进行
try
,成功时,将其附加到列表中;失败时,将其附加到

然后在函数末尾返回一个元组:

return tuple(ret)

如果有必要的话。

只需使用
dict.get
。每次使用:

try:
    country        = data['country']     
except KeyError:
    country = ''
可以等效地替换为:

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

Thx ShadowRanger,有了您的回答,我进入了以下代码,这确实更容易阅读:

def getNetwork(self, search):
    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)

谢谢你们两个的回答!我稍后会测试。我非常喜欢get()解决方案,因为这正是我的问题……正如文档所示:>如果key在字典中,则返回key的值,否则为默认值。如果未给出default,则默认为None,这样该方法就不会引发keyrerror。
def getNetwork(self, search):
    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)