gpt4 book ai didi

python - 是否有可能是嵌套的try/except过多导致栈溢出?

转载 作者:太空宇宙 更新时间:2023-11-03 14:36:39 25 4
gpt4 key购买 nike

我有一个混合数据集,我试图通过使用 try/except block 来处理所有情况。本质上,我会尝试第一种情况,如果失败,那么我会在 except block 中尝试下一种情况,依此类推。

在我达到 10 级 except 之前它一直工作正常。这是 Python 中的东西吗。

我找不到这个问题的明确答案。我怀疑我写的代码真的很糟糕。

我只在第一个 try block 中给出实际代码:


try:
logf.write(f'Processing Type 8...\n')
with open(filename, 'r') as las_file:
l = las_file.readlines()

# drop the header lines and start reading the file from the header row (indicated by ~A)
lasdata = [x.replace('\n', '').split() for x in list(
dropwhile(lambda x: '~A' not in x, l))]

# delete ~A from the header row
del lasdata[0][0]

las_df = pd.DataFrame(lasdata)

# now set column names as header
new_header = [
'DEPTH',
'GR',
'CALI',
'BRD',
'LSD',
'SSD',
]
las_df = las_df[1:]
las_df.columns = new_header

# add hole id as column
las_df['BHID'] = hole
las_df['filename'] = filename

# make a copy and drop unwanted columns
las_df = las_df[[
'filename',
'BHID',
'DEPTH',
'LSD',
'SSD',
'GR',
'CALI']].copy()

# append each hole in loop
type8_df = type8_df.append(las_df)

# write success to log file
logf.write(f'Type 8: Hole {hole} Processed OK\n')

# output to CSV file without the pandas index column
type8_df.to_csv(path_or_buf='.\\type_8.csv', index=False)
except KeyError as e:
try:
do_something()
except KeyError as e:
try:
do_something()
except KeyError as e:
try:
do_something()
except KeyError as e:
try:
do_something()
except Exception as e:
logfile.write(e)

等等 - 十层深

这是错误信息:

Fatal Python error: XXX block stack overflow Current thread 0x000027a8 (most recent call first): File "e:/python/geology/las_data/las_converter.py", line 398 in las_converter File "e:/python/geology/las_data/las_converter.py", line 471 in

我有十多个 KeyError 案例要处理。我该怎么做?

更新

我重构了这个,现在我生成了一个列表,列出了我必须处理的所有标题/列名案例——当处理一些文件目录时,我得到多达 50 个案例,所以我的 try/except 方法永远不会工作。然后我使用 if 语句处理每个文件以按类型匹配然后处理。

谢谢大家让我学到了很多。

最佳答案

以下内容适用于 CPython。此限制可能不会出现在其他实现中。

错误是“致命 Python 错误:XXX block 堆栈溢出”,而不是“运行时错误:超出最大递归深度”。后者将是一个计算器。当 block 堆栈已经达到其 block 限制并且您再添加一个时,会发生此错误。

for/while/try/except/finally/with block 只能在函数中嵌套到有限的深度。深度限制为 20。

应该可以重写代码,使其远低于此限制。一种方法是将代码的内部部分分解成自己的函数,这将有自己的限制。

关于python - 是否有可能是嵌套的try/except过多导致栈溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57685101/

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