python版本中字典编码的区别

时间:2016-08-26 23:07:55

标签: python

我有以下代码字符串:

#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
>>> 

循环中宣布的变量bcde; somedictionary在周期前宣布 我没有在pythondocks中找到关于这个时刻的一些信息 如何解决它,如果它在python 3.4.0中工作?

1 个答案:

答案 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 逻辑。