【问题标题】:PRAW: get_submission works inconsistentlyPRAW:get_submission 工作不一致
【发布时间】:2014-01-20 08:19:43
【问题描述】:

脚本从 Reddit 上的特定评论中获取信息。 它是否有效取决于给它的永久链接。

import praw
from pprint import pprint
clipboard = ['permalink']
com = r.get_submission(clipboard).comments[0]
pprint(vars(com))

此固定链接有效:http://www.reddit.com/r/redditgetsdrawn/comments/1tvjmr/i_got_a_new_job_recently_and_would_love_to_have/cec9wh4

这个没有:http://www.reddit.com/r/redditgetsdrawn/comments/1ts9hi/surprise_me_thanks_in_advance/cec0897?context=3

我感觉以 ?context=3 或其他不寻常的结尾结尾的永久链接具有搞砸 .get_submission 的特殊特征。

这是错误报告:

Traceback (most recent call last):
  File "C:\Users\Aymeric\Python33\Scripts\brdg\brdg.py", line 14, in <module>
    com = r.get_submission(clipboard).comments[0]
  File "C:\Users\Aymeric\Python33\lib\site-packages\praw\__init__.py", line 875, in get_submission
    comment_sort=comment_sort)
  File "C:\Users\Aymeric\Python33\lib\site-packages\praw\decorators.py", line 320, in wrapped
    return function(cls, *args, **kwargs)
  File "C:\Users\Aymeric\Python33\lib\site-packages\praw\objects.py", line 837, in from_url
    s_info, c_info = reddit_session.request_json(url, params=params)
  File "C:\Users\Aymeric\Python33\lib\site-packages\praw\decorators.py", line 158, in wrapped
    return_value = function(reddit_session, *args, **kwargs)
  File "C:\Users\Aymeric\Python33\lib\site-packages\praw\__init__.py", line 476, in request_json
    response = self._request(url, params, data)
  File "C:\Users\Aymeric\Python33\lib\site-packages\praw\__init__.py", line 338, in _request
    cache_key = (normalize_url(request.url), tuple(key_items))
  File "C:\Users\Aymeric\Python33\lib\site-packages\praw\helpers.py", line 140, in normalize_url
    if url.endswith('.json'):
AttributeError: 'list' object has no attribute 'endswith'

编辑:这是我将列表更改为字符串时得到的结果:

Traceback (most recent call last):
  File "C:\Users\Aymeric\Python33\lib\json\decoder.py", line 368, in raw_decode
    obj, end = self.scan_once(s, idx)
StopIteration

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Aymeric\Python33\Scripts\brdg\brdg.py", line 14, in <module>
    com = r.get_submission(clipboard).comments[0]
  File "C:\Users\Aymeric\Python33\lib\site-packages\praw\__init__.py", line 875, in get_submission
    comment_sort=comment_sort)
  File "C:\Users\Aymeric\Python33\lib\site-packages\praw\decorators.py", line 320, in wrapped
    return function(cls, *args, **kwargs)
  File "C:\Users\Aymeric\Python33\lib\site-packages\praw\objects.py", line 837, in from_url
    s_info, c_info = reddit_session.request_json(url, params=params)
  File "C:\Users\Aymeric\Python33\lib\site-packages\praw\decorators.py", line 158, in wrapped
    return_value = function(reddit_session, *args, **kwargs)
  File "C:\Users\Aymeric\Python33\lib\site-packages\praw\__init__.py", line 483, in request_json
    data = json.loads(response, object_hook=hook)
  File "C:\Users\Aymeric\Python33\lib\json\__init__.py", line 332, in loads
    return cls(**kw).decode(s)
  File "C:\Users\Aymeric\Python33\lib\json\decoder.py", line 352, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\Aymeric\Python33\lib\json\decoder.py", line 370, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

Edit2: 如果我删除 ?context=3 并将列表更改为字符串,它现在可以工作了。显然,它从来没有作为一个列表起作用(我的记性不好!),?context=3 似乎是问题所在。

【问题讨论】:

  • 错误是说您正在尝试使用列表调用endswith() 函数。它是一个字符串函数。
  • 但是为什么它可以与其他链接一起正常工作,仍然是一个列表?当我将链接更改为字符串时,我收到另一个错误报告,我将在 OP 中对其进行编辑。
  • 这可能是模块的错误。而不是var.endswith(val) 尝试if var[-1] == val:
  • 我不明白你想让我改变什么,我没有 var.endswith(val) 可以替换。同样在完整的脚本中 get_submission 有一个字符串作为参数,我想它在这里工作是因为列表只有一个元素?
  • 显然我错了,我的第一反应是:它似乎根本不适用于列表。我不知道我是怎么想的。

标签: python python-3.x reddit praw


【解决方案1】:

?context=3 是对的,答案很简单,在您提出问题时 PRAW 不支持 url 参数。现在可以使用 PRAW 2.1.13 或更高版本。使用pip install praw -U 升级您的 PRAW 版本。

您认为get_submission 将列表作为参数,可能是因为将它与get_submissions 方法混淆了,后者确实将可迭代对象作为参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多