1

エラー処理を行っているPythonコードがいくつかありますが、何らかの理由で、コードはこの特定のエラーを処理できないようです。

raise GQueryError("No corresponding geographic location could be found for the     specified location, possibly because the address is relatively new, or because it may be incorrect.")
geopy.geocoders.google.GQueryError: No corresponding geographic location could be found for the specified location, possibly because the address is relatively new, or because it may be incorrect.

これがソースです:

import csv
from geopy import geocoders
import time

g = geocoders.Google()

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)

    try:
        place, (lat, lng) = g.geocode(a)
    except ValueError:
        #print("Error: geocode failed on input %s with message %s"%(a, error_message))
        continue 

    b = str(place) + "," + str(lat) + "," + str(lng) + "\n"
    print b
    f.write(b)

十分なエラー処理を含めていませんか?「ValueErrorを除いて」がこの状況を処理するだろうという印象を受けましたが、私はそれについて間違っているに違いありません。

助けてくれてありがとう!

PS私はこれをコードから引き出しましたが、それが実際に何を意味するのかはまだわかりません。

   def check_status_code(self,status_code):
    if status_code == 400:
        raise GeocoderResultError("Bad request (Server returned status 400)")
    elif status_code == 500:
        raise GeocoderResultError("Unkown error (Server returned status 500)")
    elif status_code == 601:
        raise GQueryError("An empty lookup was performed")
    elif status_code == 602:
        raise GQueryError("No corresponding geographic location could be found for the specified location, possibly because the address is relatively new, or because it may be incorrect.")
    elif status_code == 603:
        raise GQueryError("The geocode for the given location could be returned due to legal or contractual reasons")
    elif status_code == 610:
        raise GBadKeyError("The api_key is either invalid or does not match the domain for which it was given.")
    elif status_code == 620:
        raise GTooManyQueriesError("The given key has gone over the requests limit in the 24 hour period or has submitted too many requests in too short a period of time.")
4

1 に答える 1

5

現在、try/except はValueErrors のみをキャッチしています。GQueryError同様にキャッチするには、except ValueError:行を次のように置き換えます。

except (ValueError, GQueryError):

または、GQueryError が名前空間にない場合は、次のようなものが必要になる場合があります。

except (ValueError, geocoders.google.GQueryError):

または、ValueError と にリストされているすべてのエラーをキャッチするにはcheck_status_code:

except (ValueError, GQueryError, GeocoderResultError, 
        GBadKeyError, GTooManyQueriesError):

(繰り返しgeocoders.google.ますが、名前空間にない場合は、すべての geopy エラーの先頭にエラーの場所を追加します。)

または、可能性のあるすべての例外をキャッチしたいだけの場合は、次のように簡単に実行できます。

except:

ただし、これは一般的に悪い習慣です。キャッチplace, (lat, lng) = g.geocode(a)したくない行の構文エラーなどもキャッチするため、geopy コードを調べて、スローされる可能性のあるすべての例外を見つけることをお勧めします。捕まえたい。うまくいけば、それらのすべてが、見つけたコードのビットにリストされています。

于 2012-05-27T21:03:27.790 に答える