我是Flask的新手,在编写视图时,如果应该捕获所有错误,我会徘徊.如果我这样做,大多数视图代码应该包含try ... except.我认为这不是优雅的.
例如.
@app.route('/')
def index():
try:
API.do()
except:
abort(503)
Run Code Online (Sandbox Code Playgroud)
我应该像这样编码吗?如果没有,服务会崩溃(uwsgi + lnmp)吗?
你只能抓住你能处理的东西."句柄"一词意味着"做一些有用的事情"而不仅仅是"打印消息而死".打印和骰子已经由异常机制处理,并且可能比你更好.
例如,这不是有用的处理异常:
denominator = 0
try:
y = x / denominator
except ZeroDivisionError:
abort(503)
Run Code Online (Sandbox Code Playgroud)
你无能为力,这abort是多余的,因为无论如何,未被捕获的异常将导致发生.以下是有用处理的示例:
try:
config_file = open('private_config')
except IOError:
config_file = open('default_config_that_should_always_be_there')
Run Code Online (Sandbox Code Playgroud)
但请注意,如果第二次打开失败,没有任何用处,它会向上移动调用堆栈并可能暂停程序.你永远不应该做的是裸露,except:因为它隐藏了有关故障的信息.当你得到"所有它说的是503"并且你不知道出了什么问题的缺陷报告时,这将导致很多头部刮伤API.do().
尝试/除了无法进行任何有用处理的块会使代码混乱并在视觉上掩盖主要的执行流程.没有异常的语言会强制您检查每次调用错误返回,如果只是为了生成错误返回自己.部分存在例外以消除代码噪声.