【发布时间】:2020-01-19 18:05:25
【问题描述】:
我有以下代码,我正在尝试使用 overpy 对文件进行反向地理编码。在尝试这样做时,我遇到了几个问题
1) 为避免 Overpytoomanyrequests 错误,我正在使用 Try except,每次出现错误时,while 循环都从第一个开始,有没有办法让 while 循环从出现错误的行恢复,而不是从第一个开始线? 2)还有少数数据点的纬度值超过90,我们可以编写代码跳过这些数据不一致的行并处理下一行吗? 我尝试通过,继续,接下来所有这些都以无限循环结束
import overpy
import pandas as pd
import numpy as np
import time
import sys
df = pd.read_csv("/home/runner/sample_v1.csv")
df.sort_values(by=['cvdt35_timestamp_s'],inplace=True)
api= overpy.Overpass()
box = 0.0005
queries = []
names = []
highways =[]
results = []
df['Name']=''
df['Highway'] =''
while True :
try :
for row in df.index:
query = ('way["highway"~"."](around:15,{},{});(._;<;); out body;').format(df.gps_lat_dd.iloc[row], df.gps_lon_dd.iloc[row])
queries.append(query)
for i in range(len(queries)):
query = queries[i]
print(str(i)+', '+query)
result = api.query(query)
results.append(result)
for result in results:
n1 = []
h1 = []
for way in result.ways:
name = way.tags.get("name", "n/a")
n1.append(name)
highway = way.tags.get("highway", "n/a")
h1.append(highway)
names.append(','.join(n1))
highways.append(','.join(h1))
except overpy.exception.OverpassTooManyRequests:
time.sleep(10*6)
except overpy.exception.OverpassBadRequest:
next
break
df['Name']=names
df['Highway']=highways
样本数据
RecordID GPS_Latitude_Min_dec gps_lat_dd gps_lon_dd
947 1.6383 167.077305 333.077305
948 1.6383 167.077305 333.077305
881 0.4332 42.30722 -83.18112667
882 0.4333 42.30722167 -83.18112667
883 0.433 42.30721667 -83.181125
884 0.433 42.30721667 -83.181125
代码应忽略前两行并从第三行继续处理。提前感谢您的帮助
编辑如下
while True :
try :
for row in df.index:
query = ('way["highway"~"."](around:15,{},{});(._;<;); out body;').format(df.gps_lat_dd.iloc[row], df.gps_lon_dd.iloc[row])
queries.append(query)
for i in range(len(queries)):
query = queries[i]
print(str(i)+', '+query)
result = api.query(query)
results.append(result)
except overpy.exception.OverpassTooManyRequests:
time.sleep(10*6)
False
except overpy.exception.OverpassBadRequest:
False
continue
for result in results:
n1 = []
h1 = []
for way in result.ways:
name = way.tags.get("name", "n/a")
n1.append(name)
highway = way.tags.get("highway", "n/a")
h1.append(highway)
names.append(','.join(n1))
highways.append(','.join(h1))
但仍然是无限循环
【问题讨论】:
-
continue是继续前进的声明,而不是停止并继续前进的break。您可能需要将循环计数保持在 try/except 块之外,然后它在遇到异常时不会被重置。现在考虑您的while,没有任何东西可以跟踪它的位置,并且您的 try/except 包含了整个其余代码,这意味着它破坏了整个块而不仅仅是单个部分。 -
修改代码如下但还是死循环
while True : try : for row in df.index: query = ('way["highway"~"."](around:15,{},{});(._;<;); out queries.append(query) except overpy.exception.OverpassTooManyRequests: time.sleep(10*6) except overpy.exception.OverpassBadRequest: continue for i in range(len(queries)): -
您需要将其编辑到帖子中以保持间距。
-
我在问题中更新了
-
我添加了一个解决方案 @anonymous13 我无法测试它,因为我没有你的数据,但它应该可以工作。
标签: python loops try-catch except