您的位置:

提示Exception("didn't get permanent or status arguments")的解决方案

  发布时间:2024-12-17 11:02:35
Tornado中出现Exception("didn't get permanent or status arguments")的原因和解决方案,包括确保在调用self.redirect()和set_status()方法时传递permanent和status参数。示例代码展示了如何正确传递这两个参数避免异常。

问题原因

tornado出现Exception("didn't get permanent or status arguments")的原因是在调用self.redirect()方法时,缺少了permanentstatus参数。在Tornado中,self.redirect()方法需要至少提供一个位置参数和另一个可选的关键字参数,如果未提供这两个参数中的任何一个,就会触发该异常。因为Tornado需要知道重定向是临时重定向还是永久重定向,或者需要指定重定向的HTTP状态码。因此,在调用self.redirect()方法时,应确保提供了必需的参数,以避免出现这个异常。

解决方案

Tornado出现Exception("didn't get permanent or status arguments")的原因是由于在使用Tornado时,未能正确传递permanentstatus参数。解决这个问题的方法是在调用相关函数时,确保传递这两个参数的正确值。 对于大多数情况下,出现这个异常的原因是在Tornado的重定向函数self.redirect(url)中,缺少了permanentstatus参数。permanent参数用于指示重定向是否为永久性的,可以设置为True或False;status参数用于指定HTTP状态码。 如果需要进行临时重定向,可以这样调用:self.redirect(url, status=302)。如果需要进行永久性重定向,可以这样调用:self.redirect(url, status=301)。 以下是一个示例代码,展示如何正确使用Tornado的重定向函数并传递permanentstatus参数:


import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        # 进行重定向,重定向到百度网站,状态码为301(永久性重定向)
        self.redirect("https://www.baidu.com", permanent=True, status=301)

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

通过以上方法,可以正确传递permanentstatus参数,避免出现Exception("didn't get permanent or status arguments")的异常。

具体例子

在Tornado中,当出现 Exception("didn't get permanent or status arguments") 这个异常时,通常是因为调用 set_status() 方法时没有传递必要的参数。在Tornado中,set_status() 方法用于设置HTTP响应的状态码,需要同时传入状态码和可选的文本描述。 为了正确使用 set_status() 方法,并避免出现异常,需要在调用该方法时确保传递了状态码参数以及可选的状态描述参数。下面是一个示例代码,演示了正确使用 set_status() 方法的方法:


import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.set_status(404, "Not Found")
        self.write("Page not found")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

在上面的示例中,当访问根路由时,会调用 set_status(404, "Not Found") 方法来设置HTTP响应的状态码为404,并在响应中返回 "Not Found" 的描述信息。 通过以上示例代码,展示了在Tornado中正确使用 set_status() 方法的方式,确保了传递了必要的参数,避免了出现 Exception("didn't get permanent or status arguments") 异常。