【问题标题】:GeocoderDotUS... Syntax of Python check for 'None'GeocoderDotUS ... Python 检查“无”的语法
【发布时间】:2012-06-02 20:17:24
【问题描述】:
import csv
from geopy import geocoders
import time

g = geocoders.GeocoderDotUS()

spamReader = csv.reader(open('locations.csv', 'rb'), delimiter='\t', quotechar='|')

f = open("output.txt",'w')

for row in spamReader:
    a = ', '.join(row)
    #exactly_one = False
    time.sleep(1)


    place, (lat, lng) = g.geocode(a)


    if None in (lat, lng):
        f.write("none")
    else:
        b = str(place) + "," + "[" + str(lat) + "," + str(lng) + "]" + "\n"
        print b
        f.write(b)

所以我已经确定,如果 GeocoderDotUS 没有找到地址,它将返回 None。我已经编写了一些脚本来尝试检查 None 但是我似乎仍然得到了这个跟踪。我有点迷茫。

Traceback (most recent call last):
File "C:\Users\Penguin\workspace\geocode-nojansdatabase\src\GeocoderDotUS.py", line 17, in <module>
place, (lat, lng) = g.geocode(a)
TypeError: 'NoneType' object is not iterable

我对 None systax 的检查是否有错误?在此先感谢您的帮助....

【问题讨论】:

  • 这些都是很好的答案。我需要研究一下代码。再次感谢...

标签: python geopy


【解决方案1】:

我对geopy一无所知,但看起来问题就是你所说的:如果地理编码没有找到它,它会返回None。 Just None,不是以 None 为元素的元组。因此,在将结果分配给 lat 和 lng 之前,您需要检查 None。比如:

geoResult = g.geocode(a)
if geoResult is None:
    f.write("none")

# If we get here, the result is not None and we can proceed normally
place, (lat, lng) = geoResult
b = "..." # continue with your processing here

【讨论】:

    【解决方案2】:

    正如您在错误消息中看到的,问题出在place, (lat, lng) = ... 行。

    返回 None 的是 g.geocode calll(您尝试立即将其分配给 place 变量和 lat, lng 元组,这显然一定会失败)。

    所以尝试以下方法:

    result = g.geocode(a)
    if result:
        place, (lat, lng) = result
    else:
        # ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      相关资源
      最近更新 更多