python函数中有多少try / except太多

时间:2016-01-21 00:48:46

标签: python

我有一个对地址进行地理编码的功能。我不希望这个函数死掉所以我试图捕获错误并返回一个元组。 但是我也想区分错误,为此我在多个地方使用try / except。

是否有太多的尝试/除外?你会如何优化这个功能?

这是我的代码:

def geocode(address):
    js = ''
    try:
        urlq = urllib.urlencode({'address':address, 'sensor':'false'})
    except Exception, e:
        return (False, "Error url-encoding address. Error:%s" % e, js, 'failed')
    try:
        f = urllib2.urlopen(GEO_URL + urlq)
        d = f.read()
    except Exception, e:
        return (False, "Error making connection. Error:%s" % e, js, 'failed')
    #
    try:
        js = json.loads(d)
    except Exception, e:
        return (False, "Error converting JSON. Error:%s" % e, js, 'failed')
    return (True, '', js, 'ok')

1 个答案:

答案 0 :(得分:4)

抓住Exception总是一个坏主意。您想指定要捕获的错误。

try:
    ...
except URLError, e:
    return (False, "Error making connection. Error:%s" % e, js, 'failed')
except ValueError, e:
    return (False, "Error converting JSON. Error:%s" % e, js, 'failed')
except UnicodeEncodeError, e:
    return (False, "Error unicode formatting. Error:%s" % e, js, 'failed')

同样返回元组以指示错误通常不是首选。考虑将try除了在调用函数中,并让错误传播。