关于python中异常处理的困惑

时间:2014-01-25 06:59:57

标签: python exception-handling geopy

在下面的脚本中,我的try块上发生了一个TypeError,它不允许API发生ValueError。如何跳过行self.address, (self.lat, self.lng) = g.geocode(place)的执行,以便仅捕获来自Google API的错误,而不是因为它而导致我的代码中出现错误?

from geopy import geocoders

class GeoCode():
    def __init__(self, place):
        try:
            g = geocoders.GoogleV3()
            self.address, (self.lat, self.lng) = g.geocode(place)
        except ValueError as e:
            print "Failed for address %s with message:\n %s" % (place,e) 
            continue

在测试错误值时

>>> b = GeoCode('nosuchplacecanexist')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "geocode.py", line 7, in __init__
    self.address, (self.lat, self.lng) = g.geocode(place)
TypeError: 'NoneType' object is not iterable

将其更改为:

from geopy import geocoders

class GeoCode():
    def __init__(self, place = "Yashwant Place, Chanakyapuri, New Delhi"):
        try:
            g = geocoders.GoogleV3()
            addr = g.geocode(place)
            if addr is not None:
                self.address, (self.lat, self.lng) = addr 

        except ValueError as e:
            print "Failed for address %s with message:\n %s" % (place,e) 

0 个答案:

没有答案