Python 2.7.6与2.7.3的XML模块解析差异

0 投票
1 回答
641 浏览
提问于 2025-04-17 21:29

我正在看这个教程,学习一些Python的概念。不过,在使用2.76版本时,我遇到了一个问题。视频中,Dave在53分钟的时候使用的是2.73版本,具体是在monitor.py文件里。

我用这行代码来尝试修复一个错误……

from xml.etree.ElementTree import parse

而不是

import xml.etree.ElementTree import parse 

(这是视频中在Python 2.7.3版本里使用的)

但是当我使用它时,结果并不如意。我反而得到了这个错误。

   PS C:\python27> python monitor.py
   Traceback (most recent call last):
     File "monitor.py", line 28, in <module>
        monitor()
      File "monitor.py", line 15, in monitor
       doc = parse(u)
      File "C:\Python27\lib\xml\etree\ElementTree.py", line 1182, in parse
       tree.parse(source, parser)
      File "C:\Python27\lib\xml\etree\ElementTree.py", line 656, in parse
       parser.feed(data)
     File "C:\Python27\lib\xml\etree\ElementTree.py", line 1642, in feed
        self._raiseerror(v)
      File "C:\Python27\lib\xml\etree\ElementTree.py", line 1506, in _raiseerror
        raise err
    xml.etree.ElementTree.ParseError: undefined entity &nbsp;: line 50, column 47

我应该写什么样的导入代码,为什么?我试过' as '和'import'。

这是我正在使用的代码。

#monitor.py
import urllib
from xml.etree.ElementTree import parse

candidates = ['4131','4163','4132']
daves_latitude = 41.980262


def distance(lat1, lat2):
    'Return distance in miles between two lats'
    return 69*(lat1 - lat2)

def monitor():
    u = urllib.urlopen('http://ctabustracker.com/bustime/mapgetBusesForRoute.jsp?route=22')
    doc = parse(u)
    for bus in doc.findall('bus'):
        busid = bus.findtext('id')
        if busid in candidates:
            lat = float(bus.findtext('lat'))
            dis = distance(lat, daves_latitude)
            print busid, dis, 'miles'
        print '-'*10


import time

while True:
    monitor()
    time.sleep(60)

1 个回答

0
#XXX INCORRECT, DO NOT USE IT
import xml.etree.ElementTree import parse 

错误信息 xml.etree.ElementTree.ParseError: undefined entity &nbsp 和你如何导入 ElementTree 模块没有关系。这个问题在 Python 2.7.6 和 2.7.3 中表现是一样的。

@karthikr 在评论中链接了一个解释这个问题的帖子&nbsp; 在 XML 中默认是没有定义的,具体可以查看 解析带有 (X)HTML 实体的 XML

撰写回答