Var*_*cko 10 python refactoring try-catch
我有以下代码:
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()
Run Code Online (Sandbox Code Playgroud)
这可以写成:
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()
Run Code Online (Sandbox Code Playgroud)
我很高兴该方法method_to_be_executed_in_case_of_exception_or_pk_is_false()
出现两次,即在if和try中的其他地方......除外.
有一个更好的方法吗?
mgi*_*son 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()
Run Code Online (Sandbox Code Playgroud)
真的,我们甚至不需要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()
Run Code Online (Sandbox Code Playgroud)
您可以尝试以下方法:
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()
Run Code Online (Sandbox Code Playgroud)
我已经更新了特定的异常捕获而不是捕获所有异常,这总是不好的做法,正如其他人指出的那样.假设您的方法将抛出其中一个CatchableExceptions.
| 归档时间: |
|
| 查看次数: |
27969 次 |
| 最近记录: |