【问题标题】:Error occurred in a Python scriptPython 脚本中发生错误
【发布时间】:2014-04-14 18:22:23
【问题描述】:

我已经用 apache web 服务器实现了 cgi python 脚本。 我有以下功能:

def check(form=None, key=''):
    if form == None:
        return -1
    value = form.has_key(key)
    if value == False:
        return -1
    return 0

这是我的标题:

“内容类型:文本/纯文本;charset=UTF-8”

但是当我运行它并且什么都不传递给表单时,显示了以下错误。

Python 脚本中出现问题。这里是顺序 导致错误的函数调用,按照它们发生的顺序。

而这一行value = form.has_key(key) 被标记为错误。

这是回溯,我看到 fieldStorage 没有创建字典来存储密钥:

/usr/lib/python2.7/cgi.py in has_key(self=FieldStorage(None, None, 'keyA=valA&keyB=valB&keyC=calC\x00\x00'), key='keyA')
587         """Dictionary style has_key() method."""
588         if self.list is None:
=>589             raise TypeError, "not indexable"
590         return any(item.name == key for item in self.list)
591  builtin TypeError = <type 'exceptions.TypeError'>

: 不可索引 args = ('不可索引',) message = '不可索引'

我该如何解决这个问题。 谢谢。

【问题讨论】:

  • 你能粘贴堆栈跟踪吗
  • /opt/lampp/htdocs/ConfirmPassword.fcgi in check_input_param(form=FieldStorage(None, None, 'CMD=ConfirmPasswordRequest&password=1234&poweroff=0\x00\x00'), cmd_key='CMD') 25 if form == None: 26 return -1 => 27 cmd_value = form.has_key(cmd_key) 28 if cmd_value == False: 29 return -1 cmd_value undefined, form = FieldStorage(None, None, 'CMD=ConfirmPasswordRequest&password=1234&poweroff =0\x00\x00'), form.has_key = , cmd_key = 'CMD'
  • 您自己说的,您将 nothing 传递给 form。如果form 为空,则无法访问form.has_key(key),因为它是无效/空对象。因此,错误。
  • 为了提高可读性,您可以编辑您的问题 ;-)
  • 现在我将 A=a&B=b&C=c 传入表单。但是发生了同样的错误。我也无法获得表格的长度。

标签: python apache cgi


【解决方案1】:
def check(form=None, key=''):
    if form == None:
        return -1
    value = form.has_key(key)
    if value == False:
        return -1
    return 0

if "__main__" == __name__:
    check()

上面的代码不会报错

【讨论】:

  • OP 没有使用 CLI 执行文件。他们想使用 Web 界面(apache+cgi)执行它。在这种情况下,您的代码将永远不会被执行,因为 if "__main__" == __name__: 将始终返回 false
【解决方案2】:

我不确定您是如何执行 check() 方法的,但我已经自己测试过它,它对我来说工作得很好。

#! /usr/bin/python
def check(form=None, key=''):
    if form == None:
        return -1
    value = form.has_key(key)
    if value == False:
       return -1
    return 0

def index():
    return check()

输出:-1

【讨论】:

    猜你喜欢
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多