0

Python 2.6 を使用して、はるか下のスクリプトを実行すると、次のエラーが発生します。

Traceback (most recent call last):
  File "g.py", line 7, in <module>
    results  = Geocoder.geocode(row[0])
  File "/usr/lib/python2.6/site-packages/pygeocoder.py", line 261, in geocode
    return GeocoderResult(Geocoder.getdata(params=params))
  File "/usr/lib/python2.6/site-packages/pygeocoder.py", line 223, in getdata
    raise GeocoderError(j['status'], url)
pygeocoder.GeocoderError: Error ZERO_RESULTS
Query: http://maps.google.com/maps/api/geocode/json?region=&sensor=false&bounds=&language=&address=%22++A+FAKE+ADDRESS

Python 2.6 スクリプト:

import csv, string
from pygeocoder import Geocoder

with open('file.csv') as goingGeo:
        theSpreadsheet = csv.reader(goingGeo, quotechar=None)
        for row in theSpreadsheet:
                results  = Geocoder.geocode(row[0])
                (lat, long) = results[0].coordinates
                with open('geo_file.csv', 'a') as f:
                        f.write(row[0] + ",")
                        f.write(row[1] + ",")
                        f.write(row[2] + ",")
                        f.write(row[3] + ",")
                        f.write(row[4] + ",")
                        f.write(row[5] + ",")
                        f.write(row[6] + ",")
                        f.write(row[7] + ",")
                        try:
                                f.write(str(lat))
                        except GeocoderError:            
                                pass
                        f.write(",")
                        try:
                                f.write(str(long))
                        except GeocoderError:            
                                pass
                        f.write('\n')

エラーが発生してもスクリプトを続行したいだけです。

ありがとうございました!

4

4 に答える 4

1

writeおそらくGeoCoderErrorをスローできない呼び出しの周りにtry/exceptブロックがありますが、geocoder()そのエラーをスローできる(そして明らかにそうする)呼び出しの周りにtry/exceptがありません。おそらく次のようなものが必要です。

try:
    results  = Geocoder.geocode(row[0])
    (lat, long) = results[0].coordinates
except GeocoderError:
    (lat, long) = (0.0, 0.0)
于 2013-04-27T01:58:39.687 に答える
0

次のように try-except-finally ステートメントを使用します。

try:
    f.write(str(lat))
except GeocodeError:
    pass
finally:
    do_something_else_regardless_of_above
于 2013-04-27T01:59:20.227 に答える
0

部品は正しい軌道に乗っていtry: except GeocoderErrorますが、部品が間違った場所にあります。Geocoder.geocodeそれがエラーをスローしているため、呼び出しをラップするようにそれらを移動する必要があります。

        for row in theSpreadsheet:
                try:
                        results  = Geocoder.geocode(row[0])
                except GeocoderError:
                        continue
                (lat, long) = results[0].coordinates

importからのGeocoderError名前が必要になることにも注意してくださいpygeocoder。また、longPython のキーワードであるため、その変数には別の名前を付けることをお勧めします。

于 2013-04-27T01:59:26.070 に答える
0
#starting from line 6:
for row in theSpreadsheet:
        try:
            results  = Geocoder.geocode(row[0])
        except:
            pass
#rest of script . . .

「except」を使用して特定のエラーを処理することもできます。

try:
    results=Geocoder.geocode(row[0])
except GeocodeError:
    #deal with error
于 2013-04-27T02:01:27.963 に答える