【发布时间】:2016-07-10 06:55:36
【问题描述】:
我有一个让我发疯的问题。我有一个在 Flask 中构建的 API 中运行的函数。我根据发生的某些事情返回 JSON 值。我将只向您展示四行代码,因为其余的在这里并不重要:
print 'example' not in json_string
return jsonify({'error': 'Error entering user.'})
if 'example' not in json_string:
return jsonify({'error': 'Error entering user.'})
所以基本上我第一次运行它并打印True返回:
{'error': 'Error entering user.'}
然后我评论说首先返回,它验证 if 语句并返回:
{}
这里到底发生了什么?我复制了完全相同的行,但它不会在 IF 语句之后返回值。它确实返回一个空集,但没有返回任何内容。
对我来说毫无意义。有任何想法吗?谢谢!
更新
在第二种情况下,如果我在返回之前打印它,我会得到<Response 55 bytes [200 OK]>,所以那里有东西。为什么不退呢?
【问题讨论】:
-
这些行都是同一个函数的一部分吗?
-
是的,它们在同一个函数中。对于更多上下文,它在一个 try 函数中,我已经意识到它现在正在进入函数的“finally”部分。我不明白为什么它会到达那里,因为它会在 if 语句中打印出任何内容。既然我在这里得到更多信息,我现在将用更多细节来扩展这个问题......
-
啊,我太傻了。我传递的返回实际上是返回 try 函数,而不是整个函数。如果其他人有同样的问题,我会扩展我的问题。
-
不要忘记
finally无论是否引发异常都会被执行......所以如果它的那部分从结尾处脱落/返回......那'也可能会引起混乱...... -
谢谢,是的,这是有道理的。我在 try/except/finally 函数的工作方式上犯了一些错误,所以我会在这里详细说明。我敢肯定其他人也遇到过同样的问题,我在这里找不到任何可以提供帮助的东西。