我有很多函数可以解析文件中的数据,通常返回结果列表。在
如果我在文件中遇到一个不可靠的行,我想继续处理有效的行,然后返回它们。但我还想向调用函数报告错误。我要报告它的原因是,调用函数可以通知用户文件需要查看。我不想在parse函数中开始做GUI操作,因为这似乎严重违反了关注点分离。parse函数无法访问我正在向其写入错误消息的控制台。在
这使得我想要返回成功的数据,但也因为错误而引发了一个异常,这显然是我做不到的。在
考虑以下代码:
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")
很明显最后三行没有意义,但我想不出一个好的方法来做这件事。我想我可以这样叫它
^{pr2}$但是返回错误代码似乎已经不是python了,更不用说返回错误代码和实际结果值的元组了。在
事实上,我觉得我想在一个不应该太复杂的应用程序中做一些奇怪的事情,这让我觉得我可能做错了什么。这个问题有更好的解决办法吗?或者有什么方法可以使用finally
来返回值并同时引发异常?在
另一种可能的设计是通过将错误处理程序作为参数传入来反转控制。在
(另外,不要觉得必须告诉Python如何在列表中积累数据。它已经知道了。在这里,列表理解并不难
没有人说处理“错误”的唯一有效方法是抛出异常。在
在您的设计中,调用者需要两条信息:(1)有效数据,(2)是否发生错误(可能还有关于哪里出错的信息,以便它可以格式化有用的错误消息)。对于返回一对值来说,这是一个完全有效的、超出实际的情况。在
另一种设计是将一个可变集合作为参数传递给函数,并让它将它希望发出的任何错误消息填充到函数中。这通常会简化调用程序中的管道,特别是在解析器和代码之间存在多层调用的情况下,这些代码知道如何在以后处理错误消息。在
改为Emit a warning,并让代码决定如何处理它。在
相关问题 更多 >
编程相关推荐