【问题标题】:What can be used instead of parse_qs function可以用什么代替 parse_qs 函数
【发布时间】:2011-01-10 11:59:52
【问题描述】:

我有以下代码用于解析 youtube 提要并返回 youtube 电影 ID。我怎样才能将其重写为与 python 2.4 兼容,我认为它不支持 parse_qs 函数?

YTSearchFeed = feedparser.parse("http://gdata.youtube.com" + path)
videos = []
for yt in YTSearchFeed.entries:
    url_data = urlparse.urlparse(yt['link']) 
    query = urlparse.parse_qs(url_data[4])
    id = query["v"][0]
    videos.append(id) 

【问题讨论】:

标签: python deprecated feedparser python-2.4


【解决方案1】:

我假设您现有的代码在 2.6 或更新版本中运行,而您正试图回到 2.4? parse_qs 曾经位于 cgi 模块中,然后才移至 urlparse。试试import cgicgi.parse_qs

TryPyPy's 评论的启发,我认为您可以通过以下方式使您的源代码在任一环境中运行:

import urlparse # if we're pre-2.6, this will not include parse_qs
try:
    from urlparse import parse_qs
except ImportError: # old version, grab it from cgi
    from cgi import parse_qs
    urlparse.parse_qs = parse_qs

但是我没有 2.4 来尝试这个,所以没有承诺。

【讨论】:

  • 所以使用:try: from cgi import parse_qs; urlparse.parse_qs = parse_qs \n except ImportError: pass
  • 谢谢,但这只是你的答案......或者只是关于如何使用它的一个小说明。随意合并它,更好的答案更好:)
  • 为什么是urlparse.parse_qs = parse_qs 行?我很确定这会失败,此时不会定义 urlparse
  • @benhoyt 因为他已经调用了urlparse.parse_qs,所以如果我们只说“使用 cgi”,他将不得不替换调用。如果他对模块进行猴子补丁(你是对的,那必须在导入 urlparse 之后),任何对 parse_qs 的调用都应该可以正常工作。
【解决方案2】:

我试过了,但还是不行。

简单地将 parse_qs/qsl 函数从 cgi 模块复制到 urlparse 模块会更容易。

问题解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    相关资源
    最近更新 更多