我有以下代码字符串:
#coding: utf
import json
import base64
from lxml import html, etree
import urllib2
somedictionary={}
url1="someurl1"
base64string = base64.b64encode('%s:%s' % ('user', 'pass'))
xml1request = urllib2.Request(url1)
xml1request.add_header("Authorization", "Basic %s" % base64string)
xml1=etree.parse(urllib2.urlopen(xml1request))
somelist=xml1.xpath("//list1//a/text()")
for element in somelist:
url2="part of url2"+element+"part of url2"
xml2request=urllib2.Request(url2)
xml2request.add_header("Authorization", "Basic %s" % base64string)
xml2=etree.parse(urllib2.urlopen(xml2request))
b=xml2.xpath("//list2//b/text()")
c=xml2.xpath("//list2//c/text()")
d=xml2.xpath("//list2//d/text()")
e=xml2.xpath("//list2//e/text()")
somedictionary[key.index(element)]={key.index(element):{"a": element, "b": b, "c": c, "d": d, "e": e}}
#json.dump(bamboo, open("12345.txt","w"))
在python 3.4.0中它可以正常工作。 但在python 2.7.10中它返回一个错误:
Traceback (most recent call last):
File "C:\Users\user\11.py", line 25, in <module>
somedictionary[key.index(element)]={key.index(element):{"a": a, "b": b, "c": c, "d": d, "e": e}}
NameError: name 'key' is not defined
>>>
循环中宣布的变量b
,c
,d
,e
;
somedictionary
在周期前宣布
我没有在pythondocks中找到关于这个时刻的一些信息
如何解决它,如果它在python 3.4.0中工作?
答案 0 :(得分:1)
它可以在python3而不是python2中工作的唯一方法是,如果 somelist 在python3中为空,那么你永远不会到达循环内的代码:
In [20]: l = []
In [21]: for ele in l:
print(not_defined) # never reach here
....:
In [22]: l = [1]
In [23]: for ele in l:
print(not_defined) # loop once so we get here and error
....:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-23-6e24b65bf7e0> in <module>()
1 for ele in l:
----> 2 print(not_defined)
3
NameError: name 'not_defined' is not defined
您从未在任何地方定义名称 key ,因此bar somelist 为空您将在 python2 <中获得上述 NameError / em>和 python3 。
所以你有两个问题,在 python3 你的代码没有找到任何东西,如果它确实你仍然有 key 问题,因为你没有定义它任何地方,所以你需要找出 key 应该是什么,并调试你的 python3 逻辑。