创建reddit对象时出现此错误。这是代码:
import praw, requests, ctypes
r = praw.Reddit(user_agent="Wallpaper downloader")
这是错误:
追踪(最近一次呼叫最后一次):
File "C:/Python27/background.py", line 3, in <module>
r = praw.Reddit(user_agent="Wallpaper downloader")
File "C:\Python27\lib\site-packages\praw\__init__.py", line 1028, in __init__
super(AuthenticatedReddit, self).__init__(*args, **kwargs)
File "C:\Python27\lib\site-packages\praw\__init__.py", line 502, in __init__
super(OAuth2Reddit, self).__init__(*args, **kwargs)
File "C:\Python27\lib\site-packages\praw\__init__.py", line 615, in __init__
super(UnauthenticatedReddit, self).__init__(*args, **kwargs)
File "C:\Python27\lib\site-packages\praw\__init__.py", line 280, in __init__
self.handler = handler or DefaultHandler()
File "C:\Python27\lib\site-packages\praw\handlers.py", line 70, in __init__
self.http = Session() # Each instance should have its own session
File "C:\Python27\lib\site-packages\requests\sessions.py", line 176, in __init__
self.headers = default_headers()
File "C:\Python27\lib\site-packages\requests\utils.py", line 461, in default_headers
'User-Agent': default_user_agent(),
File "C:\Python27\lib\site-packages\requests\utils.py", line 430, in default_user_agent
_implementation = platform.python_implementation()
File "C:\Python27\lib\platform.py", line 1458, in python_implementation
return _sys_version()[0]
File "C:\Python27\lib\platform.py", line 1423, in _sys_version
repr(sys_version))
ValueError: failed to parse CPython sys.version: '2.7.3 |EPD_free 7.3-2 (32-bit)| (default, Apr 12 2012, 14:30:37) [MSC v.1500 32 bit (Intel)]'
我使用pip安装了praw,而我正在使用Windows。知道我为什么会遇到这个错误吗?
答案 0 :(得分:7)
这似乎是EPD中的一个错误。
platforms.py尝试在函数_sys_version
(由python_implementation
调用,如堆栈跟踪所示),在某些情况下,用正则表达式解析sys.version
。在你的情况下,它认为你正在运行CPython(是吗?CPython是普通的Python版本,而不是Jython或IronPython),这就是正则表达式运行的情况。正则表达式:
_sys_version_parser = re.compile(
r'([\w.+]+)\s*'
'\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*'
'\[([^\]]+)\]?')
运行它的代码:
else:
# CPython
match = _sys_version_parser.match(sys_version)
if match is None:
raise ValueError(
'failed to parse CPython sys.version: %s' %
repr(sys_version))
version, buildno, builddate, buildtime, compiler = \
match.groups()
name = 'CPython'
builddate = builddate + ' ' + buildtime
代码非常简单:因为正则表达式不匹配而引发错误。看看正则表达式:
r'([\w.+]+)\s*'
'\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*'
'\[([^\]]+)\]?')
第一部分([\w.+]+)\s*
匹配空格分隔的[a-zA-Z0-9_.+]
块 - 该函数暗示这是版本号。这可能正确匹配“2.7.3”。
第二部分更有趣。代码暗示它正在寻找buildno
,正则表达式似乎¹表明它正在寻找文字paren((
)。我们稍后会在您的字符串中看到此内容:(default, Apr 12 2012, 14:30:37)
但是这部分是阻碍的:|EPD_free 7.3-2 (32-bit)|
。我的猜测是正则表达式没有预料到这一点,而这正是导致它窒息的原因。
在短期内,为了测试这个理论,尝试在Python中删除它。只需分配给sys.version
,例如
# This raises an exception for you:
platform.python_implementation()
# Try this:
sys.version = '2.7.3 (default, Apr 12 2012, 14:30:37) [MSC v.1500 32 bit (Intel)]'
# Hopefully, this no longer raises.
platform.python_implementation()
如果这确实解决了,你可能想要长期摆脱它。我假设这是Enthought Python Distribution Free - 你可能不得不在那里提交一个bug,因为这可能是他们已经完成的事情。
¹另外,这里有一些奇怪之处。文字应该将那些反斜杠加倍,或者是原始字符串。 (我相信来自第一个字面的r不会延续,然而,一个未知的逃避最终会被削减 - 所以它仍然有用。)
答案 1 :(得分:1)
我一直遇到同样的问题。我刚刚为它提交了bug fix。
答案 2 :(得分:0)
有同样的问题,通过将PythonPath更改为Anaconda安装来修复它(我之前安装了Python)。