Python- 跳过错误行,处理下一行

Python- Skip the line with error and process the next line

我有以下代码,我正在尝试使用 overpy 对文件进行反向地理编码。在尝试这样做时,我遇到了几个问题

1) 为了避免 Overpytoomanyrequests 错误,我正在使用 Try except,每次出现错误时 while 循环从第一个开始,有没有办法让 while 循环从出现错误的行恢复而不是开始从第一行? 2)也有一些数据点的lat值超过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

代码应忽略前两行并从第 3 行继续处理。预先感谢您的帮助

编辑如下


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))

但还是死循环

您可以在唯一可以实际遇到异常的地方(您使用 api 查询的地方)捕获您的 try/except 块。

如果你完成了那部分,你就跳出了 while 循环,然后只追加真正的结果。

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'] =''

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)):
    result = 0
    query = queries[i]
    print(str(i)+', '+query)
    while True:
        try:
            result = api.query(query)
            break
        except overpy.exception.OverpassTooManyRequests:
            time.sleep(10*6)
        except overpy.exception.OverpassBadRequest:
            break
    if result:
        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))

df['Name']=names
df['Highway']=highways