Python 循环浏览列表时处理错误

Python 循环浏览列表时处理错误,python,Python,在标题所述的列表上进行迭代时,我在处理错误时遇到了问题。我正在IPSRList中存储IP列表,并对它们进行迭代,以检查它们在GeoIP2数据库中是否有任何数据。问题是它在一个不在数据库中的ip上迭代,它会破坏程序,我正在尝试学习如何处理这个错误,以便它继续迭代并返回所需的数据 def getGeoIp(ipSrcList): reader = geoip2.database.Reader('./GeoLite2-City.mmdb') for ip in ipSrcList:

在标题所述的列表上进行迭代时,我在处理错误时遇到了问题。我正在IPSRList中存储IP列表,并对它们进行迭代,以检查它们在GeoIP2数据库中是否有任何数据。问题是它在一个不在数据库中的ip上迭代,它会破坏程序,我正在尝试学习如何处理这个错误,以便它继续迭代并返回所需的数据

def getGeoIp(ipSrcList):

    reader = geoip2.database.Reader('./GeoLite2-City.mmdb')
    for ip in ipSrcList:
        try:
            response = reader.city(str(ip))
            end
        
        except ValueError:
            print(f'{ip} not found in the databse')

    
    print(response)
    return response
这是我收到的错误 228,在

    raise geoip2.errors.AddressNotFoundError(
geoip2.errors.AddressNotFoundError: The address <IP ADDRESS HERE> is not in the database.
raise geoip2.errors.AddressNotFoundError(
geoip2.errors.AddressNotFoundError:该地址不在数据库中。
问题是,程序应该继续迭代列表,直到所有列表都被迭代。

您有

try: 
    # Do some work
except ValueError:
    # Handle the exception of type ValueError or any of its sub-classes.
问题是代码引发了geoip2.errors.AddressNotFoundError类型的错误,它是RuntimeError的子类,而不是ValueError。(ValueError和RuntimeError都是。)

如果您不清楚,请阅读或您最喜欢的Python书籍中的Python异常处理。以下是Python文档中的要点:

然后,如果[error's]类型与以except关键字命名的异常匹配,则执行except子句,然后在try语句之后继续执行

如果except子句中的类是同一个类或其基类,则该类与异常兼容(但不是相反,列出派生类的except子句与基类不兼容)


什么部分不起作用?除了随机的
结束
之外,这是一个正常的列表迭代?这还不清楚。问题是错误不是与
ValueError
不同?如果是,让回溯作为您需要捕获的错误的指南。请提供预期的。显示中间结果与您期望的。我们应该能够将单个代码块粘贴到文件中,运行它,并重现您的问题。这也让我们可以在您的上下文中测试任何建议。您发布的代码只是一个您不调用的函数。我们还希望您在错误点之前跟踪有问题的值。请准确解释至少,当您跟踪此代码时,您无法从得到的输出中理解。请将该跟踪包含在您的MRE中。因此,您只是捕获了一个错误。正如回溯所述,您需要捕获
geoip2.errors.AddressNotFoundError
而不是
ValueError