您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

创建Reddit对象时,Praw“无法解析CPython sys.version”

创建Reddit对象时,Praw“无法解析CPython sys.version”

这似乎是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”正确匹配。

第二部分更加有趣。代码提示,它在找一个buildno,和正则表达式似乎to¹表明它在寻找一个字面 括号(()。我们稍后会在您的字符串中看到:(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发行免费-你可能不得不提交Bug存在,因为这可能是东西,他们所做的一切。

¹顺便说一句,这里有些古怪。文字应将那些反斜杠加倍,或者是原始字符串。( 我相信第一个文字的r不会继续,但是,无论如何,一个未知的转义符最终都是斜杠,所以仍然可以使用。)

python 2022/1/1 18:25:11 有176人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶