python2与python3的raise语句
在flask文档中有一个钩子函数的示例,该钩子函数允许在未找到flask定义的url端点时,通过调用为函数的python2与python3的raise语句,python,python-3.x,exception,flask,raise,Python,Python 3.x,Exception,Flask,Raise,在flask文档中有一个钩子函数的示例,该钩子函数允许在未找到flask定义的url端点时,通过调用为函数的url\u添加自定义行为。如果没有匹配的用户定义url端点,程序员可以添加自定义端点或重新引发异常(使用原始上下文) def external_url_handler(error, endpoint, values): "Looks up an external URL when `url_for` cannot build a URL." # This is an exa
url\u添加自定义行为。如果没有匹配的用户定义url端点,程序员可以添加自定义端点或重新引发异常(使用原始上下文)
def external_url_handler(error, endpoint, values):
"Looks up an external URL when `url_for` cannot build a URL."
# This is an example of hooking the build_error_handler.
# Here, lookup_url is some utility function you've built
# which looks up the endpoint in some external URL registry.
url = lookup_url(endpoint, **values)
if url is None:
# External lookup did not have a URL.
# Re-raise the BuildError, in context of original traceback.
exc_type, exc_value, tb = sys.exc_info()
if exc_value is error:
raise exc_type, exc_value, tb
else:
raise error
# url_for will use this result, instead of raising BuildError.
return url
app.url_build_error_handlers.append(external_url_handler)
此代码段似乎是python2代码,对于python3,由于raiseexc\u类型、exc\u值、tb
行,此代码段失败。
和文档列出了raise语句的不同参数
将此代码段转换为python3的正确方法是什么?这在以下文档中有详细说明:
您可以使用with_traceback()
exception方法(返回相同的异常实例,并将其回溯设置为其参数),一步创建一个异常并设置自己的回溯,如下所示:
raise Exception("foo occurred").with_traceback(tracebackobj)
因此,在你的情况下,这将是:
raise exc_type(exc_value).with_traceback(tb)
等效的Py3代码是raise exc\u类型(exc\u值)。带有回溯(tb)