我有一个可以返回以下三项之一的函数:
- 成功(
True) - 失败(
False) - 错误读取/解析流(
None)
我的问题是,如果不应该针对True或进行测试False,应该如何查看结果。以下是我目前的操作方式:
result = simulate(open("myfile"))
if result == None:
print "error parsing stream"
elif result == True: # shouldn't do this
print "result pass"
else:
print "result fail"
它真的像删除== True零件一样简单,还是应该添加一个三布尔数据类型。我不希望该simulate函数引发异常,因为我希望外部程序对错误进行的所有操作均将其记录并继续。
您问错了问题;您应该寻求帮助来定义您的结果……您对“故障”和“错误解析流”的理解是什么?它们的含义是什么,后果是什么,呼叫者可能想采取什么行动?在每种情况下(通过,失败,解析错误)?
—
John Machin 2010年
我正在模拟一个电力系统,如果人们失去房屋电源,那将是一次失败。如果我无法读取模拟文件,那是完全不同的错误。
—
James Brooks 2010年
在
—
詹姆斯·布鲁克斯
simulate函数内部,我捕获了所有异常;我不希望模拟器内部发生任何事情来停止其余程序的运行(并处理下一个元素)。但是答案使我改变了主意。
@詹姆斯·布鲁克斯:对。这就是try / except处理的全部内容。如果您
—
S.Lott 2010年
simulate有可以捕获并重试的东西,那就很好。但是,如果“失败”,则不应返回None。它应该只对调用它的脚本引发异常。无论哪种方式,simulate都完成了。返回None并不像引发适当的异常那样有用-或允许异常传播simulate到调用脚本中进行处理。
@James,请
—
Peter Hansen 2010年
except Exception:改用。这将捕获所有“实际”错误以及Warning和StopIteration。它允许KeyboardInterrupt并SystemExit通过。如果您真的想抓住这些问题,那么最好使用另一个外部try / except或其他清楚记录您意图的结构,因为这些不是“错误”。(但我确实说过“几乎从不” ...也许在您的情况下,您确实想抓取一切,甚至阻止Ctrl-C或sys.exit()退出等)