创建新方法时,我总是添加一个异常处理程序,我不知道这是好是坏。我认为查看源代码时可能会有些烦恼。
将日志记录功能放在异常块中是一种好习惯吗?
def insert_new_camera(self, camera, records, file_hdlr):
try:
pass
except BaseException as e:
traceback.print_exc(file=sys.stdout)
raise e
#1 楼
不要这样做。如果在每个函数中记录异常,则将一遍又一遍地打印相同的异常。它只有第一次才有用,在这之后很痛苦。
它也会使您的代码更难读写。
当您需要否则就失去它。在某些时候,必须捕获您的异常,并且不能重新抛出异常。这可能在默认的异常处理程序中发生。那是您应该登录的地方。不要记录刚刚抛出的异常。相信任何抓住他们的人都将其记录下来。
#2 楼
通常,对于大多数语言,最好在绝对需要之前才处理异常。那可能只是在页面崩溃之前,您要记录错误并将用户重定向到错误页面。根据定义,异常是例外。如果您能够始终如一地期望它们,那么通常就可以不必再去处理它们,而如果您不知道该异常发生时该如何处理,那么最好什么也不做,而让它冒泡到应用程序的顶部。正如Winston所说:“在某个时候,您的异常必须被捕获而不是重新抛出。”
#3 楼
有时候,您无法做任何例外处理。内存不足是一个例子。在我使用的编程语言中,对于私有的未公开方法/函数,我没有放置任何东西,除非有充分的理由(例如其关键)我跟踪了此问题,或者提供了更有用的错误以改善现有的错误消息)。在这些情况下,我盲目地认为清除已应用于传递给它的任何数据。进入您的系统。因为所有输入都是邪恶的,所以这里将是拥有它们的地方。
异常处理还与处理处于不一致状态的系统有关。它可以恢复吗?这是我亲自画线的地方。如果存在内部状态被破坏的威胁,则将其抛出。
#4 楼
建议不要将try-catch
放在每个函数和块代码中,也不经济。而是创建一个单独的类来处理异常并在此处记录异常,然后显示或处理这些异常。
评论
\ $ \ begingroup \ $
而且,他最终将得到一个堆栈跟踪,该跟踪不会比一个函数高,他应该只执行提高而不是提高e。
\ $ \ endgroup \ $
–加布
14年2月14日在7:30