常见的Python 2 和 3 差别

Posted 唐大麦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见的Python 2 和 3 差别相关的知识,希望对你有一定的参考价值。

Python2.7

print "hello"

hello

Python3.0

print "hello"

  File "tmp.py", line 1
    print "hello"
                ^
SyntaxError: invalid syntax

正确应为:
Python3.0

print("hello")

hello

Python2.7

print 1 / 2

0

Python3.0

print(1 / 2)

0.5

Python2.7

print .keys()

[]

Python3.0

print(.keys())

<dict_keys object at 0x385f50>

Python2.7

print None < None

False

Python3.0

print(None < None)

Traceback (most recent call last):
  File "tmp.py", line 1, in <module>
    print(None < None)
TypeError: unorderable types: NoneType() < NoneType()

Python2.7

print 055

45

Python3.0

print(055)

  File "tmp.py", line 1
    print(055)
            ^
SyntaxError: invalid token

正确做法:
Python3.0

print(0o55)

45

Python2.7

print long(987654321*987654321)

975461057789971041

Python3.0

print(long(987654321*987654321))

Traceback (most recent call last):
  File "tmp.py", line 1, in <module>
    print(long(987654321*987654321))
NameError: name 'long' is not defined

正确做法:
Python3.0

print(int(987654321*987654321))

975461057789971041

Python2.7

print u"\\u0024"

$

Python3.0

print(u"\\u0024")

  File "tmp.py", line 1
    print(u"\\u0024")
                  ^
SyntaxError: invalid syntax

正确做法
Python3.0

print("\\u0024")

$

Python2.7

if (isinstance("helloworld", basestring)):
    print "True"

True

Python3.0

if (isinstance("helloworld", basestring)):
  print("True")


Traceback (most recent call last):
  File "tmp.py", line 1, in <module>
    if (isinstance("string", basestring)):
NameError: name 'basestring' is not defined

正确应该是

Python3.0

if (isinstance("string", str)):
  print("True")

True

Python2.7

True = "True"

(no output)

Python3.0

True = "True"

  File "tmp.py", line 1
    True = "True"
SyntaxError: assignment to keyword

Python2.7

False = "False"

(no output)

Python3.0

False = "False"

  File "tmp.py", line 1
    False = "False"
SyntaxError: assignment to keyword

Python2.7

try:
  print 1+1
except ValueError, err:
  print err

2

Python3.0

try:
  print(1+1)
except ValueError, err:
  pass

  File "tmp.py", line 3
    except ValueError, err:
                     ^
SyntaxError: invalid syntax

正确应该是:

Python3.0

try:
  print(1+1)
except ValueError as err:
  print(err)

2

Python2.7

print [x for x in 1, 2, 3]

[1, 2, 3]

Python3.0

print([x for x in 1, 2, 3])

  File "tmp.py", line 1
    print([x for x in 1, 2, 3])
                       ^
SyntaxError: invalid syntax

正确应该是:

Python3.0

print([x for x in (1, 2, 3)])

[1, 2, 3]

Python2.7

print ''.join([`x` for x in (1,2,3)])

123

Python3.0

print(''.join([`x` for x in (1,2,3)]))

  File "tmp.py", line 1
    print(''.join([`x` for x in (1,2,3)]))
                   ^
SyntaxError: invalid syntax

正确做法是:

Python3.0

print(''.join([repr(x) for x in (1,2,3)]))

123

Python2.7

print 1 <> 2

True

Python3.0

print(1 <> 2)

  File "tmp.py", line 1
    print(1 <> 2)
             ^
SyntaxError: invalid syntax

正确做法
Python3.0

print(1 != 2)

True

Python2.7

exec = "exec"

  File "tmp.py", line 1
    exec = "exec"
         ^
SyntaxError: invalid syntax

Python3.0

exec = "exec"

(no output)

Python2.7

print buffer("Hello world")

Hello world

Python3.0

print(buffer("Hello world", 6, 5))

Traceback (most recent call last):
  File "tmp.py", line 1, in <module>
    print(buffer("Hello world", 6, 5))
NameError: name 'buffer' is not defined

正确做法:
Python3.0

print(repr(memoryview(b"Hello world")))

<memory at 0x3c3660>

Python2.7

print "a":1.has_key("a")

True

Python3.0

print("a":1.has_key("a"))

Traceback (most recent call last):
  File "tmp.py", line 1, in <module>
    print("a":1.has_key("a"))
AttributeError: 'dict' object has no attribute 'has_key'

正确做法:

Python3.0

print("a" in "a":1)

True

Python3.0

import _winreg

Traceback (most recent call last):
  File "tmp.py", line 1, in <module>
    import _winreg
ImportError: No module named _winreg

Python2.7

import ConfigParser

(no output)

Python3.0

import ConfigParser

Traceback (most recent call last):
  File "tmp.py", line 1, in <module>
    import ConfigParser
ImportError: No module named ConfigParser

正确做法:

Python3.0

import configparser

(no output)

Python2.7

import copy_reg

(no output)

Python3.0

import copy_reg

Traceback (most recent call last):
  File "tmp.py", line 1, in <module>
    import copy_reg
ImportError: No module named copy_reg

正确做法:

Python3.0

import copyreg

(no output)

Python2.7

import Queue

(no output)

Python3.0

import Queue

Traceback (most recent call last):
  File "tmp.py", line 1, in <module>
    import Queue
ImportError: No module named Queue

正确做法
Python3.0

import queue

(no output)

Python2.7

import SocketServer

(no output)

Python3.0

import SocketServer

Traceback (most recent call last):
  File "tmp.py", line 1, in <module>
    import SocketServer
ImportError: No module named SocketServer

正确做法:
Python3.0

import socketserver

(no output)

Python2.7

import markupbase

(no output)

Python3.0

import markupbase

Traceback (most recent call last):
  File "tmp.py", line 1, in <module>
    import markupbase
ImportError: No module named markupbase

正确做法:

Python3.0

import _markupbase

(no output)

Python2.7

import repr

(no output)

Python3.0

import repr

Traceback (most recent call last):
  File "tmp.py", line 1, in <module>
    import repr
ImportError: No module named repr

正确做法:

Python3.0

import reprlib

(no output)

Python2.7

import test.test_support

(no output)

Python3.0

import test.test_support

Traceback (most recent call last):
  File "tmp.py", line 1, in <module>
    import test.test_support
ImportError: No module named test_support

正确做法:

Python3.0

import test.support

(no output)

Python2.7

import string
print string.letters

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

Python3.0

import string
string.letters

Traceback (most recent call last):
  File "tmp.py", line 2, in <module>
    string.letters
AttributeError: 'module' object has no attribute 'letters'

正确做法:

Python3.0

import string
print(string.ascii_letters)

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

Python2.7

import string
print string.uppercase

ABCDEFGHIJKLMNOPQRSTUVWXYZ

Python3.0

import string
string.uppercase

Traceback (most recent call last):
  File "tmp.py", line 2, in <module>
    string.uppercase
AttributeError: 'module' object has no attribute 'uppercase'

正确做法:

Python3.0

import string
print(string.ascii_uppercase)

ABCDEFGHIJKLMNOPQRSTUVWXYZ

Python2.7

import string
print string.lowercase

abcdefghijklmnopqrstuvwxyz

Python3.0

import string
string.lowercase

Traceback (most recent call last):
  File "tmp.py", line 2, in <module>
    string.lowercase
AttributeError: 'module' object has no attribute 'lowercase'

正确做法:

Python3.0

import string
print(string.ascii_lowercase)

abcdefghijklmnopqrstuvwxyz

以上是关于常见的Python 2 和 3 差别的主要内容,如果未能解决你的问题,请参考以下文章

python2.x与3.x差别

python学习第七十一天:django2与1的差别和视图

python2-3差别

Android常见原理性面试题

python: extend (扩展) 与 append (追加) 的差别

python习题常见操作和概念