2017-07-29 61 views
2

提出的如何处理异常考虑你有这样的代码瓶API:除外条款

@app.route('/doing/foo') 
def foo(): 
try: 
     ... 
except Exception as ex: 
    doing some stuff 

现在doing some stuff意外抛出另一个异常。如何防止服务器显示另一个通用的内部服务器错误,而不知道发生了什么?
换句话说,我如何捕获可能源于except clause的异常?

+3

另一个'try:'。 – jonrsharpe

+0

我可以添加无限的try子句;) – JavaSa

回答

2

啊哈!这是一个100年的问题。

第一种选择是移动到Python 3

Python 3只有异常链,将打印两个例外 - 被处理的人;这是由于甩在处理不当的人。

第二种选择是自己实现异常链:

手动注入新的异常到使用当前except:内的另一个try-except条款正在处理的一个。

请记住它引起循环引用。由于这是一次性例外,所以我不打算处理它。进一步使用此方法将需要使用traceback.clear_frames()清除回溯。

2

在请求处理程序中,记录错误并返回一个HTTP 500错误和一些HTML,指出发生了“内部错误”,并且包含回到某个安全点的链接,以便用户重新启动他们正在执行的任何操作。

您可以尝试捕捉更具体的异常(从最具体和最常见的对异常(这是最普通的一般例外的),你也可以尝试内省异常/回溯对象(除权在你的例子中)

大多数情况下你只是想确保你不会通过浏览器向用户显示内部应用程序状态(可能的安全隐患),并且你不会简单地将用户请求放在地板上。