我在编写的各种脚本上运行了2to3工具,以便了解我需要更改以将这些脚本移植到Python 3(尽管我最终会手工完成)。< / p>
在这样做的时候,我遇到了一个奇怪的变化2to3在我的一个剧本中制作:
-def open_pipe(pipe, perms=0644):
+def open_pipe(pipe, perms=0o644):
嗯...为什么2to3添加&#34; o&#34;在我的&#34; perms&#34;中间整数吗
来自原始来源的第41行:https://github.com/ksoviero/Public/blob/master/tempus.py
答案 0 :(得分:4)
尝试在python2 shell中输入0644
。它会给你一个不同的数字,因为它是octal
。在python3中,0o
表示octal
个数字。
python2
:
>>> 0644
420
>>>
python3
:
>>> 0644
File "<stdin>", line 1
0644
^
SyntaxError: invalid token
>>> 0o644
420
>>>
Octal文字不再是0720的形式;改用0o720。
答案 1 :(得分:3)
根据What's New In Python 3.0 - Integers:
八进制文字不再是
0720
形式;请改用0o720
。
答案 2 :(得分:2)
在Python 3中不再允许使用带有单个0
前缀的旧表示法八进制。要明确给出八进制值you need to prefix the number by a 0o
:
$ python
Python 2.7.3 (default, Dec 18 2012, 13:50:09)
>>> 0644
420
>>>
$ python3
Python 3.2.3 (default, Jul 23 2012, 16:48:24)
>>> 0644
File "<stdin>", line 1
0644
^
SyntaxError: invalid token
>>> 0o644
420
根据上面链接的文档:
八进制文字不再是
0720
形式;请改用0o720
。