Python CGI form.has_key () AttributeError - PullRequest
0 голосов
/ 01 мая 2020

Наличие очень специфической проблемы, вызывающей 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

1 Ответ

0 голосов
/ 11 мая 2020

О, смешно. form.has_key () работает в Python2, но не Python3

...