python特性无需修改_python – 2to3说“不需要更改”,然后是“需要修改的文件”...

在使用2to3工具转换Python 2代码时,遇到输出提示“无需更改”但随后列出需要修改的文件。这实际上是由于Unicode修复器在处理字符串时,尽管源代码内容未实际改变,但2to3认为有修改。此行为可能是2to3的一个小bug,导致它认为文件被修改,但实际上源代码保持不变。这种情况下,2to3不会对源文件进行实际修改。
摘要由CSDN通过智能技术生成

我运行2to3 -f all -f idioms -f buffer -f set_literal -f ws_comma foo.py

输出:

RefactoringTool: No changes to foo.py

RefactoringTool: Files that need to be modified:

RefactoringTool: foo.py

foo.py的内容:

print("Hi")

我该如何解释这个输出?

最佳答案:

修改由the unicode fixer触发.此修复程序将解释每个字符串文字的内容,并尝试重新转义无效的Unicode序列,并删除u / U字符串前缀:

def transform(self, node, results):

...

elif node.type == token.STRING:

# 1. Replace the invalid \u sequences.

val = node.value

if not self.unicode_literals and val[0] in '\'"' and '\\' in val:

val = r'\\'.join([

v.replace('\\u', r'\\u').replace('\\U', r'\\U')

for v in val.split(r'\\')

])

# 2. Strip the leading `u` in u"...."

if val[0] in 'uU':

val = val[1:]

# 3. If the whole string is the same, return the original node.

if val == node.value:

return node #

# 4. Otherwise, create a new node.

new = node.clone()

new.value = val

return new

由于某些未知原因(bug?),即使在步骤3中返回原始节点,lib2to3仍然将其解释为更改了令牌树,因此它显示“需要修改的文件”.但是,实际的源代码是相同的,因此“foo.py没有更改”.

如果步骤3返回None,它将真正说“不需要修改文件”.

只会使用原始输入重写受影响的文件.所以这个bug是无害的.

标签:python,python-2to3

来源: https://codeday.me/bug/20190516/1114777.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值