创建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。知道为什么我会收到此 错误吗?
这似乎是EPD中的错误。
这是怎么回事: 在某些情况下,函数_sys_version( python_implementation如堆栈跟踪所示,由调用)中的platform.py尝试 sys.version使用正则表达式进行解析。就您而言,它认为您正在运行CPython (是吗?CPython是普通的Python版本,而不是Jython或 IronPython之类的东西),而正则表达式就是这种情况。正则表达式:
_sys_version_parser = re.compile( r'([\w.+]+)\s*' '\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*' '\[([^\]]+)\]?')
And the code that runs it:
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”正确匹配。
([\w.+]+)\s*
[a-zA-Z0-9_.+]
“ 2.7.3”
第二部分更加有趣。代码提示,它在找一个buildno,和正则表达式似乎to¹表明它在寻找一个字面 括号(()。我们稍后会在您的字符串中看到:(default, Apr 12 2012, 14:30:37)
buildno
(
(default, Apr 12 2012, 14:30:37)
但是,这部分的方式:|EPD_free 7.3-2 (32-bit)|。我的猜测是 正则表达式并不期望这样,这正是导致它窒息的原因。
|EPD_free 7.3-2 (32-bit)|
解决方法: 在短期内,要测试该理论,请尝试在Python中删除它。只需分配 给sys.version,例如,
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发行免费-你可能不得不提交Bug存在,因为这可能是东西,他们所做的一切。
¹顺便说一句,这里有些古怪。文字应将那些反斜杠加倍,或者是原始字符串。( 我相信第一个文字的r不会继续,但是,无论如何,一个未知的转义符最终都是斜杠,所以仍然可以使用。)