我正在尝试将urlencode()数据发送到我的网络服务器。 用于urlencode()函数的数据是从位于我本地计算机上的文本文件中读取的。 当我从.py脚本中读取urlencode()函数的输入数据时,不会抛出任何错误。 但是,如果urlencode()函数的输入数据来自本地输入文本文件,则会出现以下错误:
追踪(最近一次通话): 文件“active_directory_ssl_test.py”,第30行,in params = urllib.urlencode(dict(LINE)) ValueError:字典更新序列元素#0的长度为1; 2是必需的
我正在做以下事情:
FILE=open(IN_FILE, 'r')
LINE = FILE.readline()
while LINE:
print LINE
LINE = FILE.readline()
params = urllib.urlencode(dict(LINE))
try:
f_handler = urlopen('https://host_name/path_name/file_name', params)
从文本文件中读取数据时,为什么会出现差异,即错误。在这两种情况下,变量都用作urlencode()函数的参数。
这是输入文本文件的内容:
{'hostname' : 'host.1.com', 'port' : '389', 'basedn' : 'CN=Users,DC=prem,DC=local', 'username' : 'CN=Administrator,CN=Users,DC=onprem,DC=local', 'password' : 'passwd', 'roupname' : 'CN=Group,CN=Users,DC=onprem,DC=local', 'attribute' : 'name', 'enabled' : 'sync', 'impsync' : 'sync', 'enabled' : 'enabled', 'username' : 'user@1.com', 'password' : 'passwd', 'update' ; 'update'}
答案 0 :(得分:1)
我会继续发表评论作为答案,因为它就是答案。你在字符串上调用dict()
。 dict()
函数需要两种类型的输入之一。 A. A.形成(key, value)
对的元组列表,或者key = value
形式的B.关键字参数。你没有通过其中任何一个。
- 评论的额外细节 -
>>> input = {'key1': 'value1', 'key2': 'value2'}
>>> type(input)
<type 'dict'>
>>> dict(input)
{'key2': 'value2', 'key1': 'value1'}
>>> input = "{'key1': 'value1', 'key2': 'value2'}" # This is your 2nd form.
>>> type(input)
<type 'str'>
>>> dict(input)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 1; 2 is required
另外,对于它的价值,在你的第一个例子中,对dict()
的调用是多余的。您已经有一个使用文字语法声明的字典。