指定一个显式异常类型几乎总是更好。如果使用裸except:子句,则最终可能会捕获到你期望捕获的异常以外的异常-这可能会隐藏错误或使程序无法按预期运行时更难以调试。
例如,如果要在数据库中插入行,则可能需要捕获一个异常,该异常表明该行已存在,因此可以进行更新。
try: insert(connection, data)except: update(connection, data)
如果指定了指标裸机except:,则还将捕获一个套接字错误,该错误指示数据库服务器已倒塌。最好只捕获你知道如何处理的异常-程序在异常发生时失败通常比继续执行但以奇怪的意外方式执行更好。
你可能希望使用裸机的一种情况except:是始终需要运行的程序的顶层,例如网络服务器。但是随后,你需要非常小心地记录异常,否则将无法找出问题所在。基本上,执行此 *** 作的程序中最多只能有一个位置。
其推论这一切是你的代码不应该这样做
raise Exception('some message'),因为它迫使客户端代码使用except:(或
except Exception:这是几乎一样糟糕)。你应该定义一个特定于你要发信号的问题的异常(也许从某些内置的异常子类(如
ValueError或
TypeError)继承)。或者,你应该引发特定的内置异常。这使你的代码用户可以小心地捕获他们想要处理的异常。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)