我有以下代码:
try:
pk = a_method_that_may_raise_an_exception()
except:
method_to_be_executed_in_case_of_exception_or_pk_is_false()
else:
if pk:
process_pk()
else:
method_to_be_executed_in_case_of_exception_or_pk_is_false()
这可以写成:
try:
if a_method_that_may_raise_an_exception():
process_pk()
else:
method_to_be_executed_in_case_of_exception_or_pk_is_false()
except:
method_to_be_executed_in_case_of_exception_or_pk_is_false()
我对方法method_to_be_executed_in_case_of_exception_or_pk_is_false()
感到不满意
出现两次,即在if和try中的其他地方......除了。
有更好的方法吗?
答案 0 :(得分:11)
如下:
try:
pk = a_method_that_may_rise_an_exception()
except HandleableErrors:
pk = False
finally:
if pk:
process_pk()
else:
method_to_be_executed_in_case_of_exception_or_pk_is_false()
真的,我们甚至不需要这里的finally
条款......
try:
pk = a_method_that_may_rise_an_exception()
except HandleableErrors:
pk = False
if pk:
process_pk()
else:
method_to_be_executed_in_case_of_exception_or_pk_is_false()
答案 1 :(得分:6)
您可以尝试以下方法:
class PKIsFalseException(Exception):
pass
try:
pk = a_method_that_may_raise_an_exception()
if not pk: raise PKIsFalseException()
except (PKIsFalseException, CatchableExceptions):
method_to_be_executed_in_case_of_exception_or_pk_is_false()
我已经更新了特定的异常捕获而不是捕获所有异常,这总是不好的做法,正如其他人指出的那样。假设您的方法将抛出CatchableExceptions
。
答案 2 :(得分:0)
如果你之后从函数返回,你可以这样做:
try:
pk = a_method_that_may_rise_an_exception()
except:
pass
else:
if pk:
process_pk()
return
method_to_be_executed_in_case_of_exception_or_pk_is_false()