Python:我不允许引发异常。还有其他优雅的蟒蛇方式吗?
我的工作场所规定了不使用例外的规则(允许捕获)。如果我有这样的代码
def f1()
if bad_thing_happen():
raise Exception('bad stuff')
...
return something
我可以改成它
def f1()
if bad_thing_happen():
return [-1, None]
...
return [0, something]
f1来电者会是这样的
def f1_caller():
code, result = f1(param1)
if code < 0:
return code
actual_work1()
# call f1 again
code, result = f1(param2)
if code < 0:
return code
actual_work2()
...
Python中有比这更优雅的方法吗?
没有找到相关结果
已邀请:
3 个回复
芜任亮蜡
通常是指示功能失败的完美合理方式。
芯伶句餐绕
是相当普遍的,并且在概念上运作良好。如果你期望一个返回值,并且你没有得到,那么这是一个很好的迹象表明出了问题。 另一种可能的方法是,如果您希望返回列表(或字典等),则返回空列表或字典。这可以很容易地使用
进行测试,因为在Python中空容器的评估值为
,如果你要迭代它,你可能甚至不需要检查它(取决于你想要做什么,如果函数失败) )。 当然,这些方法并不能告诉您函数失败的原因。所以你可以返回一个异常实例,例如
。然后,您可以使用
测试特定异常(或一般的异常)并打印它们以获得不错的错误消息。 (或者你可以提供一个辅助函数来测试返回代码,看它是否来自
。)你仍然可以创建自己的
子类;你只是回来而不是提高他们。 最后,我会努力改变这个荒谬的政策,因为异常是Python工作方式的重要组成部分,开销很低,任何使用你的功能的人都会期望。
屉杆绊