不要使用裸异常,而是指定异常 (E722)
捕获异常时,尽可能提及特定异常,而不是使用裸except:
子句。
一个简单的except:
子句将捕获SystemExit
和KeyboardInterrupt
异常,使使用 Control-C 中断程序变得更加困难,并且可以掩盖其他问题。如果要捕获所有表明程序错误的异常,请使用except Exception:
(bare except 等价于 except BaseException:)。
反模式
以下代码有一个裸except:
子句。
try:
user = User.objects.get(pk=user_id)
user.send_mail('Hello world')
except:
logger.error('An error occurred!')
最佳实践
相反,尽可能捕获特定异常。
try:
user = User.objects.get(pk=user_id)
user.send_mail('Hello world')
except User.DoesNotExist:
logger.error('The user does not exist with that ID')