我有一个函数没有返回,我想通过引发异常来重定向
我有以下代码:
class RedirectRequired(Exception):
def __init__(self, url):
self.url = url
功能
def Foo(x):
hede = {'hodo':5}
try:
hede.get('hodo').get('hede')
except AttributeError, e:
logger.error(e.message)
raise RedirectRequired('/')
但有错误No exception Supplied
。有关重定向或引发异常的想法,如下所示?
也有错误。
错误提交邮件失败:u'RedirectRequired' 错误无法提交消息:u'RedirectRequired'
答案 0 :(得分:1)
问题是RedirectRequired
异常的构造函数构造了一个RedirectRequired
异常来引发它,它构造了一个RedirectRequired
异常来引发它,其中......
每次通过此无限递归,您都会记录e.message
,每次都是相同的消息。
大约1000个之后,你会点击RuntimeError: maximum recursion depth exceeded
。
最有可能你真正想要的是两件事:RedirectRequired
异常类型,以及使用它的Redirector
包装类或redirect
包装函数。像这样:
class RedirectRequired(Exception):
pass
class Redirector(object):
def __init__(self, url):
self.url = url
hede = {'hodo':5}
try:
hede.get('hodo').get('hede')
except AttributeError, e:
logger.error(e.message)
raise RedirectRequired('/')
现在:
>>> r = Redirector('abc')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 8, in __init__
__main__.RedirectRequired: /