在非返回功能中提升重定向

时间:2013-11-21 22:06:18

标签: python django error-handling

我有一个函数没有返回,我想通过引发异常来重定向

我有以下代码:

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'

1 个答案:

答案 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: /