gpt4 book ai didi

python - 我想返回一个值并引发异常,这是否意味着我做错了什么?

转载 作者:太空狗 更新时间:2023-10-29 21:25:02 25 4
gpt4 key购买 nike

我有许多从文件中解析数据的函数,通常会返回结果列表。

如果我在文件中遇到不可靠的行,我想坚持并处理有效的行,然后返回它们。但我也想将错误报告给调用函数。我要报告它的原因是调用函数可以通知用户该文件需要查看。我不想在解析函数中开始做 GUI 的事情,因为这似乎严重违反了关注点分离。无论如何,解析函数无权访问我正在向其写入错误消息的控制台。

这让我想要返回成功的数据,但也因为错误而引发异常,这显然我做不到。

考虑这段代码:

try:
parseResult = parse(myFile)
except MyErrorClass, e:
HandleErrorsSomehow(str(e))

def parse(file): #file is a list of lines from an actual file
err = False
result = []

for lines in file:
processedLine = Process(line)
if not processedLine:
err = True
else
result.append(processedLine)
return result
if err:
raise MyErrorClass("Something went wrong")

显然最后三行没有意义,但我想不出一个好的方法来做到这一点。我想我可以做 return (err, result),然后像这样调用它

parseErr, parseResult = parse(file)
if parseErr:
HandleErrorsSomehow()

但是返回错误代码似乎不够 Pythonic,更不用说返回错误代码和实际结果值的元组了。

事实上,我觉得我想在应用程序中做一些不应该非常复杂的事情,这让我觉得我可能做错了什么。这个问题有更好的解决方案吗?或者有什么方法可以让我使用 finally 返回一个值并同时引发异常?

最佳答案

没有人说处理“错误”的唯一有效方法是抛出异常。

在您的设计中,调用者需要两条信息:(1) 有效数据,(2) 是否发生了错误(可能还有关于哪里出了问题的信息,因此它可以格式化有用的错误消息)。这是返回一对值的完全有效且高于地面的情况。

另一种设计是将可变集合向下作为参数传递给函数,并让它填充它想要发出的任何错误消息。这通常会简化调用者的管道,尤其是在解析器和知道如何处理错误消息的代码之间存在多层调用的情况下。

关于python - 我想返回一个值并引发异常,这是否意味着我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7313893/

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