栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

创建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*'    '[([^]]+)]?')

和运行它的代码:

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
,而正则表达式似乎¹表示它正在寻找文字括号(
(
)。我们稍后会在您的字符串中看到:
(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()

如果确实可以解决问题,则您可能希望长期摆脱它。我假设这是免费的Python发行版-您可能必须在此处提交错误,因为这可能是他们所做的。

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/661291.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号