- 主题:这种try试错的结构有没有简洁优雅的方式?
try:
df = pd.read_excel(path + '/' + fn,engine='openpyxl') #xlsx
except:
try:
df = pd.read_excel(path + '/' + fn,engine='xlrd') #xls
except:
try:
df = pd.read_csv(path + '/' + fn, sep='\t',encoding="gbk") #银河数据csv格式
except:
print('无法读取文件:',fn)
continue
--
FROM 223.72.89.*
补充一下,文件的扩展名都是xls或者xlsx,但是扩展名和实际格式不一定正确对应。
所以无法根据扩展名来判断。
【 在 finlab 的大作中提到: 】
: try:
: df = pd.read_excel(path + '/' + fn,engine='openpyxl') #xlsx
: except:
: ...................
--
FROM 223.72.89.*
看看 AI 的优化:
# 定义支持的格式和对应的读取方法
readers = [
(pd.read_excel, {"engine": "openpyxl"}), # xlsx
(pd.read_excel, {"engine": "xlrd"}), # xls
(pd.read_csv, {"sep": "\t", "encoding": "gbk"}) # 银河数据csv
]
file_path = os.path.join(path, filename)
for reader, kwargs in readers:
try:
return reader(file_path, **kwargs)
except Exception as e:
print(f"尝试使用 {reader.__name__} 读取失败: {e}")
continue
print(f"无法读取文件:{filename}")
return None
【 在 finlab 的大作中提到: 】
: try:
: df = pd.read_excel(path + '/' + fn,engine='openpyxl') #xlsx
: except:
: ...................
--
FROM 222.128.195.*
好 提升了好几个地方
【 在 kerberos 的大作中提到: 】
: 标 题: Re: 这种try试错的结构有没有简洁优雅的方式?
: 发信站: 水木社区 (Tue Sep 2 15:18:24 2025), 转信
:
: 看看 AI 的优化:
:
: # 定义支持的格式和对应的读取方法
: readers = [
: (pd.read_excel, {"engine": "openpyxl"}), # xlsx
: (pd.read_excel, {"engine": "xlrd"}), # xls
: (pd.read_csv, {"sep": "\t", "encoding": "gbk"}) # 银河数据csv
: ]
:
: file_path = os.path.join(path, filename)
: for reader, kwargs in readers:
: try:
: return reader(file_path, **kwargs)
: except Exception as e:
: print(f"尝试使用 {reader.__name__} 读取失败: {e}")
: continue
: print(f"无法读取文件:{filename}")
: return None
:
:
: 【 在 finlab 的大作中提到: 】
: : try:
: : df = pd.read_excel(path + '/' + fn,engine='openpyxl') #xlsx
: : except:
: : ...................
:
: --
:
: ※ 来源:·水木社区 mysmth.net·[FROM: 222.128.195.*]
--
FROM 123.127.56.*
做成函数,眼不见心不烦
【 在 kerberos 的大作中提到: 】
: 看看 AI 的优化:
: # 定义支持的格式和对应的读取方法
: readers = [
: ...................
--
FROM 222.85.158.*
没必要,这样就很优雅。
【 在 finlab 的大作中提到: 】
: try:
: df = pd.read_excel(path + '/' + fn,engine='openpyxl') #xlsx
: except:
: ...................
--
FROM 36.250.214.*
这样写更好看
df = None
with contextlib.suppress(Exception):
df = read_excel("openpyxl")
df = read_excel("xlrd")
【 在 finlab 的大作中提到: 】
: try:
: df = pd.read_excel(path + '/' + fn,engine='openpyxl') #xlsx
: except:
: ...................
--
修改:hgoldfish FROM 140.224.195.*
FROM 140.224.195.*
好像不一样
这个只是抑制了第一个异常,但是后面的流程也中断了。
【 在 hgoldfish 的大作中提到: 】
: 这样写更好看
: df = None
: with contextlib.suppress(Exception):
: ...................
--
FROM 223.72.89.*
反过来写?
【 在 finlab 的大作中提到: 】
: 好像不一样
: 这个只是抑制了第一个异常,但是后面的流程也中断了。
--
FROM 110.87.26.*