Python-跳过有错误的行并处理下一行

标签 python loops try-catch except

我有下面的代码,我正在尝试使用 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))

但仍然是无限循环

最佳答案

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

如果您完成了该部分,则可以跳出 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

关于Python-跳过有错误的行并处理下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57998572/

相关文章:

c# - 试试{}捕获优化?

python - Matplotlib 标签显示不全

Python程序连续将辅音移动到字符串的末尾,直到第一个字母是元音

javascript - 如何更新为 javascript/jquery 中的 for 循环的每次迭代显示的 html?

iOS - 在异常处理程序中发送网络请求失败

java - Java中try catch block 中变量 "scopes"的问题

python - 属性错误 : getfeature_names not found ; using scikit-learn

python - Python 列表中最长的元素链

python - 如何根据另一列找到一行的值?

PHP - 创建自定义模板系统?