python3和python2异常处理区别_【Python】Python3和Python2 异常处理except的不同

Python2和Python3的Exception区别

python2.x的时候:

try:

raise

except Exception, e:

print (e)

return false

现在python3.x的时候:

try:

raise

except Exception as e:

print (e)

return false

重点是: Exception 的as ,大家平时注意一下

常见异常类型

常见异常:

Exception                        所有异常的基类

AttributeError                 特性应用或赋值失败时引发

IOError                             试图打开不存在的文件时引发

IndexError                       在使用序列中不存在的索引时引发

KeyError                          在使用映射不存在的键时引发

NameError                       在找不到名字(变量)时引发

SyntaxError                     在代码为错误形式时引发

TypeError                         在内建操作或者函数应用于错误类型的对象是引发

ValueError                       在内建操作或者函数应用于正确类型的对象,但是该对象使用不合适的值时引发

ZeroDivisionError          在除法或者摸除操作的第二个参数为0时引发

链接:https://www.imooc.com/article/50566

--------------

Python2和Python3的兼容写法

一:使用ImportError,Python3中将一些Python2的模块名称做了修改,需要我们做一些处理来保证代码在不同Python版本中能够正常运行

# -*- coding: utf-8 -*-

try:

# Python3

from configparser import ConfigParser

except ImportError:

# Python2

from ConfigParser import ConfigParser

config = ConfigParser()

# do something

urllib库也是不兼容Python2和Python3的

# -*- coding: utf-8 -*-

try:

# Python2

from urllib import urlencode

from urllib import quote

from urlparse import urlparse

import urllib2 as request

except ImportError:

# Python3

from urllib.parse import urlencode

from urllib.parse import quote

from urllib.parse import urlparse

import urllib.request as request

# do something

二:根据版本来判断

根据sys.version_info.major来判断Python的版本,根据不同的版本导入不同的库。

# -*- coding: utf-8 -*-

import sys

if sys.version_info.major == 2:

# Python2

from urllib import urlencode

from urllib import quote

from urlparse import urlparse

import urllib2 as request

else:

# Python3

from urllib.parse import urlencode

from urllib.parse import quote

from urllib.parse import urlparse

import urllib.request as request

# do something

三、使用脚本将py2代码转为py3

使用命令2to3 -w file.py可以直接在原地修改文件。其他命令可以使用2to3 --help查看;2to3 file.py可以看到转变前后的内容对比

2to3是python自带的一个代码转换工具,可以将python2的代码自动转换为python3的代码。当然,不幸的是转换出的代码并没有对python2的兼容做任何的处理。所以我们并不真正使用2to3转换出的代码。执行 2to3 file.py 查看输出信息,并修正相关问题。

四、使用python -3执行python程序

2to3 可以检查出很多python2&3的兼容性问题,但也有很多问题是2to3发现不了的。在加上 -3 参数后,程序在运行时会在控制台上将python2和python3不一致,同时2to3无法处理的问题提示出来。比如python3和python2中对除法的处理规则做过改变。使用-3参数执行4/2将提示 DeprecationWarning: classic int division 。

python -3 file.py

五、使用__future__导入

使用python3的print函数,禁用python2的print语句:from __future__ import print_function

像python3一样,int除以int得float,而不像Python2那样是整除:from __future__ import division

像python3一样,字符串字面量的类型为文本(python2中的unicode,python3中的str),而不是字节(python2中的str,python3中的bytes)

from __future__ import unicode_literal

python2和python3的print不完全一样,print在python2中是个关键字,是个函数

Python3Python2

input()

raw.input(),sys.readline()

整除//

/

Python3Python2

unittest.mock.MagicMock

mock.MagicMock

urllib.request.urlretrieve

urllib.urlretrieve

queue

Queue

functools.reduce

reduce

列表推导式的变量作用域

在Python2中,列表推导式中的索引变量的是可以泄露到其封闭作用域中的。而Python3中则不可以。

下面举一个简单的例子说明这个问题,如我们在一个for循环内部使用列表推导式

for i in range(2):

a = [i for i in range(5)]

print(i)

1

2

3

在Python3中,上面的代码输出为

>>0

>>1

1

2

而在Python2中,上面的代码输出为

>>4

>>4

参考:

http://python.jobbole.com/83987/

https://blog.csdn.net/u012151283/article/details/58049151

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值