Glo*_*eye 2 python design-patterns
我遇到一种情况,我想在处理异常的同时执行多项操作。由于我想就一般情况进行讨论,因此我将把我的具体情况翻译成一些更一般的语言。
当这段代码中有异常时,我想:
因此,我可以想到两种解决方法,两者都很丑陋:
# Method nested-try/except block
try:
try:
do_things()
except:
rollback()
raise
except SpecificException as err:
do_advanced_logging(err)
return
Run Code Online (Sandbox Code Playgroud)
# Method Duplicate Code
try:
do_things()
except SpecificException as err:
rollback()
do_advanced_logging(err)
return
except:
rollback()
raise
Run Code Online (Sandbox Code Playgroud)
两者将具有相同的行为。
我自己倾向于嵌套的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
Run Code Online (Sandbox Code Playgroud)