4

これらをPython 3に移植するために何を変更する必要があるかを理解するために、作成したさまざまなスクリプトで2to3ツールを実行していました(ただし、最終的には手動で行います)。

そうしているうちに、スクリプトの 1 つで行われた 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

0644python2 シェルで入力してみてください。であるため、別の番号が表示されますoctal。Python3 では、は数字を0o意味しoctalます。

python2:

>>> 0644
420
>>> 

python3:

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

新機能python3:

8 進リテラルは 0720 の形式ではなくなりました。代わりに 0o720 を使用してください。

于 2014-06-12T14:42:22.893 に答える
3

What's New In Python 3.0 - Integersによると:

8 進リテラルはもはや形式ではありません0720。代わりに使用0o720します。

于 2014-06-12T14:44:47.183 に答える
2

Python 3 では、接頭辞が1 つの古い 8 進数表記0は使用できなくなりました。8 進値を明示的に指定するには、数値の前に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

上記のリンクのドキュメントによると:

8 進リテラルはもはや形式ではありません0720。代わりに使用0o720します。

于 2014-06-12T14:43:59.840 に答える