微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – XML解析器语法错误

所以我正在处理一个与Flickr API通信的代码块.

我在xml.parsers.expat.ExpatError(下面)中遇到’语法错误’.现在我无法弄清楚它是如何在Python模块中出现语法错误的.

我在SO上看到了关于维基百科API的另一个类似问题,它似乎返回了HTML的XML内容. Flickr API返回XML;当我不应该有来自Flickr的回复时我也会得到同样的错误(例如flickr.galleries.addPhoto)

码:

def _dopost(method, auth=False, **params):
    #uncomment to check you aren't killing the flickr server
    #print "***** do post %s" % method

    params = _prepare_params(params)
    url = '%s%s/%s' % (HOST, API, _get_auth_url_suffix(method, auth, params))
    payload = 'api_key=%s&method=%s&%s'% \
          (API_KEY, method, urlencode(params))

    #another useful debug print statement
    #print url
    #print payload

    return _get_data(minidom.parse(urlopen(url, payload)))

追溯:

Traceback (most recent call last):
  File "TESTING.py", line 30, in <module>
    flickr.galleries_create('test_title', 'test_descriptionn goes here.')
  File "/home/vlad/Documents/Computers/Programming/LEARNING/curatr/flickr.py", line 1006, in galleries_create
    primary_photo_id=primary_photo_id)
  File "/home/vlad/Documents/Computers/Programming/LEARNING/curatr/flickr.py", line 1066, in _dopost
    return _get_data(minidom.parse(urlopen(url, payload)))
  File "/usr/lib/python2.6/xml/dom/minidom.py", line 1918, in parse
    return expatbuilder.parse(file)
  File "/usr/lib/python2.6/xml/dom/expatbuilder.py", line 928, in parse
    result = builder.parseFile(file)
  File "/usr/lib/python2.6/xml/dom/expatbuilder.py", line 207, in parseFile
    parser.Parse(buffer, 0)
xml.parsers.expat.ExpatError: Syntax error: line 1, column 62

(新BSD许可下的代码http://code.google.com/p/flickrpy/)

更新:

print urlopen(url,payload)==< addinfourl at 43340936,其fp =< socket._fileobject对象位于0x29400d0>>

一个urlopen(url,payload).read()返回难以在终端中读取的HTML:P但是我设法得到一个’你没有登录’.
奇怪的是,Flickr不应该在这里返回任何内容,或者如果权限是一个问题,它应该返回99:用户登录/不足权限错误,因为它与GET功能(我期望将在有效的XML).

我已登录到Flickr(在浏览器中)并且该程序已通过删除权限进行了正确的身份验证(危险,但我想避免权限问题.)

解决方法:

SyntaxError通常表示Python语法中的错误,但我认为expatbuilder正在重载它以表示XML语法错误.试一试:除了它周围的块,并打印出有效载荷的内容,并找出它的第一行有什么问题.

我的猜测是,flickr因某种原因拒绝了您的请求并返回了纯文本错误消息,该消息在第62列有一个无效的xml字符,但它可以是任意数量的东西.您可能希望在解析之前检查http状态代码.

此外,这个方法被称为_dopost有点奇怪,但你似乎实际上是在发送一个http GET.也许这就是它失败的原因.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。