gpt4 book ai didi

python - 如何定义多个错误处理语句?

转载 作者:行者123 更新时间:2023-12-02 01:32:01 24 4
gpt4 key购买 nike

我想从 URL 中读取一组 csv 文件作为数据帧。这些文件的名称中包含日期,例如 YYYYMMDD.csv 。我需要迭代一组预定义的日期并将相应的文件读入 Python。有时文件不存在,会抛出如下错误:

raise HTTPError(req.full_url, code, msg, hdrs, fp)

urllib.error.HTTPError: HTTP Error 404: Not Found

在这种情况下,我会做的是在日期中添加一天,例如将 2020-05-01 转换为 2020-05-02 并且以防抛出对于上述错误,我会在日期上添加 2 天或最多 3 天,直到有一个没有错误的可用 url。我想知道如何在程序中编写它,可能使用嵌套的 try - except 如果在日期中添加 1 天会导致 URL 没有错误,则后续步骤没有被执行。

由于我没有数据,我将使用以下 URL 作为示例:

import pandas as pd
import requests

url = 'http://winterolympicsmedals.com/medals.csv'
s = requests.get(url).content
c = pd.read_csv(s)

此处正在读取的文件是 medals.csv。如果您尝试 madels.csvmodals.csv 您将收到我所说的错误。因此,我需要知道如何通过替换文件名来控制错误,直到获得所需的数据帧为止,就像我们首先尝试 madels.csv 导致错误,然后 models.csv 一样。 csv 也会导致错误,之后 medals.csv 会产生所需的输出。

我的问题是,有时我对文件所做的修改也会失败,除了,所以我需要知道如何适应第二次修改。

最佳答案

无需执行任何嵌套的 try-except block ,您只需要一个 try- except 和一个 for 循环。

首先,尝试读取文件的函数(返回文件内容,如果未找到文件,则返回 None):

def read_file(fp):

try:
with open(fp, 'r') as f:
text = f.read()
return text

except Exception as e:
print(e)
return None

然后,尝试从预定义日期查找文件的函数(示例输入为'20220514')。这些函数尝试读取给定日期或之后 3 天的文件内容:

from datetime import datetime, timedelta

def read_from_predefined_date(date):

date_format = '%Y%m%d'
date = datetime.strptime(date, date_format)

result = None
for i in range(4):

date_to_read = date + timedelta(days=i)
date_as_string = date_to_read.strftime(date_format)
fp = f'data/{date_as_string}.csv'
result = read_file(fp)

if result:
break

return result

测试,例如创建一个 data/20220515.csv 并运行以下代码:

d = '20220514'
result = read_from_predefined_date(d)

关于python - 如何定义多个错误处理语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73057315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com