[我刚刚在PEP 3127中注意到(对字面量和int()
参数进行合理的基数计算,以便例如010
不再是有效的字面量,如果需要八进制,则必须为0o10
), PEP的某一特定部分尚未实施。
我专门引用下面引用的部分:
Tokenizer异常处理
[如果无效令牌包含前导“ 0”,则异常错误消息应比当前的“ SyntaxError:无效令牌”更具信息性。它应该解释为十进制数字可能没有前导零,并且八进制数字在前导零之后需要一个“ o”。
但是,当我尝试使用这种(现在无效)的格式时,按照下面的记录,我仍然看到旧的(信息较少的)错误:
MyPromptHere> python3
Python 3.6.8 (default, Oct 7 2019, 12:59:55)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> x = 010
File "<stdin>", line 1
x = 010
^
SyntaxError: invalid token
>>> int('010', 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 0: '010'
>>> _
现在我不是真的[[care关于这是一个奇怪的错误,因为我从奥秘错误中赚取了很多报酬:-),但是,据我了解,PEP甚至要经过修订过程。之后他们得到了赞助,所以我很好奇为什么这样做:
PEP的这一部分尚未实施;或int()
的部分中似乎应遵循“应该”:[
int()
异常处理
ValueError
的任何调用引起的int()
至少应在错误消息中至少显式包含基数,例如:ValueError: invalid literal for base 8 int(): 09
。[我刚刚在PEP 3127中注意到(对字面量和int()参数进行合理的基数计算,以便例如010不再是有效的字面量,如果八进制是...,则必须改为0o10 ...