gpt4 book ai didi

python - 抛出异常,包括额外的信息行

转载 作者:行者123 更新时间:2023-11-28 20:49:50 25 4
gpt4 key购买 nike

我有一些解析文件的代码。很简单,就像这样:

for line in config_file:
line_split=line.split("|")
pid_index = int(line_split[3])
date_locations = [int(i) for i in line_split[2].split(",")]
in_file = line_split[0]
out_file = line_split[1]
file_info.append([in_file, out_file, date_locations, pid_index])

如果出现问题,我希望 Python 继续打印其通常的错误消息,但我想在常规错误消息的末尾添加一行,例如:

except:
print "line \"{0}\" might have failed to parse".format(line.rstrip())

但是,上面的代码只显示了额外的信息行——常规的错误消息被覆盖了!

我已经尝试将以下内容添加到我的捕获中,但它会产生丑陋的输出:

e = sys.exc_info()
for i in e:
print i

有没有一种简单的方法可以让 Python 打印常规错误消息以及我选择的附加信息行?

最佳答案

我认为这里最好的选择(并且我在这次编辑中删除了我的其他解决方案,因为我觉得它实际上不是一个很好的解决方案)是创建您自己的异常来描述您的问题,然后在您拥有的异常之上使用它:

class ParseFailureError(Exception):
def __init__(self, line):
self.line = line.rstrip()

def __str__(self):
return "line \"{0}\" might have failed to parse".format(self.line)

然后:

try:
...
except SomeException as exception:
raise ParseFailureError(line) from exception

这将产生如下内容:

Traceback (most recent call last):
File "<stdin>", line 2, in <module>
NameError: name 'x' is not defined

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "<stdin>", line 4, in <module>
__main__.ParseFailureException: line "blah" might have failed to parse

(我在示例中使用了 NameError 作为 SomeError)

请注意,我在您的 except 行中添加了一个特定的异常 - 这总是值得做的,因为捕获任何异常都可能导致您忽略您不想忽略的错误。

此方法的优点是让您的代码更容易被其他软件使用,因为它们可以捕获此特定异常。

异常的 from 语法告诉 Python 异常的根本原因。否则,Python 将假定新异常是在处理异常期间发生的错误。请注意,这仅在 Python 3.x 中可用,在早期版本中,您必须手动执行此操作。我建议使用 traceback.format_exc()然后将其打印为异常错误消息的一部分。

关于python - 抛出异常,包括额外的信息行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13673347/

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