在烧瓶中,我应该手动捕获视图中的所有可能错误吗?

时间:2012-08-04 12:49:01

标签: python flask

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

例如。

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

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

1 个答案:

答案 0 :(得分:7)

你只能抓住你能处理的东西。 “句柄”一词意味着“做一些有用的事情”而不仅仅是“打印消息而死”。打印和骰子已经由异常机制处理,可能比你做得更好。

例如,这不是有用的处理异常:

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()中出了什么问题,这将导致很多人头疼。

尝试/除了无法执行任何有用处理的块使代码混乱并在视觉上掩埋主要的执行流程。没有异常的语言会强制您检查每次调用错误返回,如果只是为了生成错误返回自己。部分原因是为了摆脱代码噪声。