我有一种情况,我想在处理异常时做多件事。由于我想针对一般情况进行说明,因此我会将我的具体情况翻译成更通用的语言。
当我在这段代码中出现异常时,我想:
- 始终执行回滚式操作
- 如果它是一个 特定于应用程序的异常,我想执行一些日志记录并吞下异常。
所以我想到了两种方法来解决,都很丑:
# Method nested-try/except block
try:
try:
do_things()
except:
rollback()
raise
except SpecificException as err:
do_advanced_logging(err)
return
# Method Duplicate Code
try:
do_things()
except SpecificException as err:
rollback()
do_advanced_logging(err)
return
except:
rollback()
raise
两者将具有相同的行为。
我自己倾向于嵌套的 try/except 解决方案。虽然它可能会稍微慢一些,但我认为这里的速度差异无关紧要——至少与我的具体情况无关。代码重复也是我想避免的事情,因为我的 rollback() 语句比数据库回滚稍微复杂一些,即使它具有完全相同的目的(它涉及 web-API)。
有没有我没有发现更好的第三种选择?还是重复代码方法更好?请注意,rollback() 功能已被尽可能多地分解,但仍包含一个函数调用和三个参数,其中包括一个硬编码字符串。由于此字符串是唯一的,因此没有理由将其设为命名常量。
最佳答案
如何检查代码中的异常实例类型?
# Method .. No Duplicate Code
try:
do_things()
except Exception as e:
rollback()
if isinstance(e, SpecificException):
do_advanced_logging(e)
return
raise
关于python - 哪个更糟糕——重复代码或双重尝试/异常(exception)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56749531/