我有很多函數從文件中解析數據,通常返回結果列表。我想返回一個值並引發異常,這是否意味着我做錯了什麼?
如果我在文件中遇到了一條狡猾的線,我想讓士兵處理有效線並返回它們。但我也想把錯誤報告給調用函數。我想報告它的原因是,調用函數可以通知用戶文件需要查看。我不想在解析函數中開始使用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()
但返回錯誤代碼似乎很取消Python的,更不用說返回的錯誤代碼和實績值的元組。
事實上,我覺得我想在應用程序中做一些如此奇怪的事情,這應該不會非常複雜,這讓我覺得我可能做錯了什麼。有沒有更好的解決這個問題?或者有什麼方法可以使用finally
來同時返回一個值並引發異常?
在這種情況下,如果沒有錯誤發生,我可能會返回一個元組'processedData,errorInformation',並且'errorInformation'是一個空字符串。另一個選擇是使用一個回調函數,如果發生錯誤時調用一些錯誤信息 - 如果調用者不關心,它可以傳遞'None'作爲回調。 –