python八进制负号放哪里_使用十六进制,八进制或二进制整数作为Python的str.format()方法的参数索引时的KeyError...

这看起来像语法中的错误.文本没有什么可澄清的;它只是将其描述为“一个数字或一个标识符”,并讨论如何解释一个数字.

测试它,该字段显然不被视为整数:

>>> '{08}'.format(*range(10)) # should be SyntaxError

'8'

>>> '{010}'.format(*range(10)) # should be '8'

'10'

>>> '{-1}'.format(*range(10)) # should be '9',but looked up as a string

KeyError: '-1'

>>> '{1 }'.format(*range(10)) # should be '1',but looked up as a string

KeyError: '1 '

>>> '{10000000000000000000}'.format(1) # should be IndexError

ValueError: Too many decimal digits in format string

查看代码,它不会从Python解析器借用来解析格式字符串;它使用自定义解析,并且将arg_spec解释为数字的代码使用get_integer函数,该函数仅转换每个数字并移位和添加,直到字段结束或我们得到PY_SSIZE_T_MAX的数字.

PEP 3101表明这是故意的:

Simple field names are either names or numbers. If numbers,they must be valid base-10 integers …

它没有具体说它不能太接近最大指数值,也不能说不能使用负指数.但是大多数其他怪癖可以通过使用“有效的基数10整数”描述而不仅仅是“整数”来解释.事实上,只是将其描述为数字而不是整数将解决所有的怪癖.

element_index的解析方式与arg_name完全相同. #8985故意说element_index“…对整数索引使用最窄的可能定义,以便将所有其他字符串传递给映射.”对于arg_name是否也是故意的,或者是否是使用相同代码的意外后果,我不确定.

文档在3.4中保持不变,并且代码在current trunk中实际上没有变化.

我建议搜索bug tracker和python-dev档案,看看之前是否已经提出过.如果没有,请确定您是否认为应该更改文档或代码,提交错误,并理想地提交补丁.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值