Python CGI form.has_key()AttributeError

问题描述 投票:0回答:1

存在一个非常特殊的问题,调用form.has_key()。代码如下:

import cgi
import cgitb
cgitb.enable()
form = cgi.FieldStorage()
if form.has_key("token"):
    token = str(form["token"].value)

如果我正确阅读它,则表示表单没有has_key属性:

=>   36     if form.has_key("token"):
     37         token = str(form["token"].value)
     38     if "tokens." in hostname:
form = FieldStorage(None, None, [MiniFieldStorage('token', 'abcxyz')]), form.has_key undefined
 /usr/lib/python3.6/cgi.py in __getattr__(self=FieldStorage(None, None, [MiniFieldStorage('token', 'abcxyz')]), name='has_key')
    588     def __getattr__(self, name):
    589         if name != 'value':
=>  590             raise AttributeError(name)
    591         if self.file:
    592             self.file.seek(0)
builtin AttributeError = <class 'AttributeError'>, name = 'has_key'
AttributeError: has_key
      args = ('has_key',)
      with_traceback = <built-in method with_traceback of AttributeError object>

作为一种解决方法,我正在这样做,效果很好:

import os
uri = os.environ.get('REQUEST_URI', '/')
if "?token=" in uri:
    token = str(form["token"].value)

系统信息:Ubuntu 18.04.4,Python 3.6.9,NGinx 1.14.0

python python-3.x python-3.6 cgi python-3.5
1个回答
0
投票
哦,好笑。 form.has_key()适用于Python2,但不适用于Python3
© www.soinside.com 2019 - 2024. All rights reserved.