4

我是 Flask 的新手,在编写视图时,如果应该捕获所有错误,我会徘徊。如果我这样做,大多数视图代码都应该用 try... 包装。我认为这不是优雅的。

例如。

@app.route('/')
def index():
    try:
        API.do()
    except:
        abort(503)

我应该这样编码吗?如果没有,服务会崩溃(uwsgi+lnmp)吗?

4

1 回答 1

8

你只抓住你能处理的东西。“处理”一词的意思是“做一些有用的事情”,而不仅仅是“打印一条消息然后死去”。print-and-die 已经由异常机制处理,并且可能比您做得更好。

例如,这不能有效地处理异常:

denominator = 0
try:
    y = x / denominator
except ZeroDivisionError:
    abort(503)

您无能为力,而且这abort是多余的,因为这就是未捕获的异常无论如何都会导致发生的原因。这是一个有用的处理示例:

try:
    config_file = open('private_config')
except IOError:
    config_file = open('default_config_that_should_always_be_there')

但请注意,如果第二次打开失败,则没有任何用处,因此它将沿调用堆栈向上移动并可能停止程序。你永远不应该做的是有一个裸露的except:,因为它隐藏了关于哪里出错的信息。当您收到“一切都是 503”的缺陷报告并且您不知道API.do().

无法进行任何有用处理的 Try / except 块会使代码变得混乱,并在视觉上掩盖了主要的执行流程。如果只是为了自己生成错误返回,无例外的语言会强制您检查每次调用是否有错误返回。存在异常的部分原因是为了消除代码噪音。

于 2012-08-04T13:07:37.423 回答