4

我在编写的各种脚本上运行 2to3 工具,以了解将这些脚本移植到 Python 3 需要进行哪些更改(尽管最后我将手动完成)。

这样做时,我在我的一个脚本中遇到了一个奇怪的 2to3 更改:

-def open_pipe(pipe, perms=0644):
+def open_pipe(pipe, perms=0o644):

嗯……为什么 2to3 在我的“perms”整数中间加了一个“o”?

这是原始来源的第 41 行: https ://github.com/ksoviero/Public/blob/master/tempus.py

4

3 回答 3

4

尝试输入0644你的 python2 shell。它会给你一个不同的数字,因为它是octal。在 python3 中,0o表示一个octal数字。

python2

>>> 0644
420
>>> 

python3

>>> 0644
  File "<stdin>", line 1
    0644
       ^
SyntaxError: invalid token
>>> 0o644
420
>>> 

新的python3

八进制文字不再是 0720 形式;改用 0o720。

于 2014-06-12T14:42:22.893 回答
3

根据Python 3.0 中的新增功能 - 整数

八进制文字不再是0720; 改为使用0o720

于 2014-06-12T14:44:47.183 回答
2

0在 Python 3 中不再允许使用带有单个前缀的旧符号八进制。要显式给出八进制值,您需要在数字前加上 a0o

$ 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

于 2014-06-12T14:43:59.840 回答