纤细的Python迷你们行为怪异

2024-10-05 11:00:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python的slimit包缩小一些javascript。在

import slimit
slimit.minify('[1,2,3,4,5,6,7,8]')

运行正常并返回“[1,2,3,4,5,6,7,8]”

^{pr2}$

给出错误:

SyntaxError: Unexpected token (NUMBER, '8') at 1:23 between LexToken(NUMBER,'0',1,22) and LexToken(RBRACKET,']',1,24)

奇怪的是缩小字符串[01,02,03,04,05,06,07]可以正常工作。在

Slimit仅在缩小数组中8个或更多零填充整数时返回错误。在


Tags: andimporttokennumber错误betweenjavascriptat
2条回答

这要归功于slimit使用的lexer。以“0”(但不是“0x”)开头的数字被视为八进制整数。因此,序列“08”以2个独立的标记(“0”、“8”)结束,因此出现“意外标记”错误。在

注意以下几点:

>>> from slimit import lexer
>>> L = Lexer()
>>> L.input("02")
>>> L.token() 
LexToken(NUMBER,'02',1,0)
>>> L.input("08")
>>> L.token()  
LexToken(NUMBER,'0',1,0)
>>> L.token()
LexToken(NUMBER,'8',1,1)

在查找lexer的the source时,我们看到用于标识数字的正则表达式:

^{pr2}$

slimit是应该支持八进制表示还是将它们作为普通的以10为基数的整数,这个问题有待商榷。在

JSON规范明确禁止数字的八进制形式,一些工具会将其标记为无效的JSON(try jsonlint)。从RFC 4627 (2.4. Numbers)

Octal and hex forms are not allowed. Leading zeros are not allowed.

虽然我不确定这是不是相对的。在

这可能是useful(javascript中关于parseInt的问题)

如果我们只是简单地使用

some_number = parseInt(08);

它返回0。(在某些浏览器中)

似乎json也不支持解码以0开头的数字。在

相关问题 更多 >

    热门问题