我是靠谱客的博主 粗心小笼包,最近开发中收集的这篇文章主要介绍Python 异常处理-python2/3差别1、常见异常类2、异常处理3、手动触发异常4、嵌套异常5、关于性能6、Python2 VS Python3,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
文章目录
- 1、常见异常类
- 2、异常处理
- 3、手动触发异常
- 4、嵌套异常
- 4.1 异常处理注意事项
- 4.2 几点建议
- 4.3 try/except/finally使用return
- 5、关于性能
- 6、Python2 VS Python3
- 6.1 输入输出
- 6.2 数据类型/地板除
- 6.3 range与xrange
- 6.4 异常机制
- 6.5 字符编码
- 6.6 布尔类型
- 6.7 模块导入
1、常见异常类
异常 | 描述 |
---|---|
NameError | 尝试访问一个没有申明的变量 |
ZeroDivisionError | 除数为0 |
SyntaxError | 语法错误 |
KeyError | 请求一个不存在的字典关键字 |
IndexError | 索引超出序列范围 |
AttributeError | 尝试访问未知的对象属性 |
ValueError | 传参类型不正确 |
FileNotFoundError | 文件不存在 |
AssertionError | 断言异常 assert判断 不对就会报异常 |
IOError | 读取不存在的文件 |
IndentationError: unexpected indent | 缩进错误 |
示例
#NameError
print(abc)
#ZeroDivisionError
print(1/0)
#IndentationError 缩进问题
print("abc")
#IndexError
lst = [1,2,3]
print(lst[5])
#SyntaxError
if 1>0::
print("ok")
#KeyError
a = {"s1":1}
print(a.get("s2",0))
print(a["s2"])
#AttributeError
import random
random.xxx()
#ValueError
int("abc")
#AssertionError 断言
a = 3
b = 4
assert a<b
2、异常处理
try:
ggg
a = 1 / 0
int("abc")
except ValueError as e:
print(e)
except ZeroDivisionError:
print("除数为0")
except NameError as b:
print("b...")
print(b)
except Exception as a:
print("a...")
print(a)
else: # 没有任何异常发生的时候执行的
print("没有异常")
finally: # 不管有没有异常和异常有没有被捕获,都会执行
print("I am Finally")
-
except 捕获错误与触发的错误不一致,程序就捕获不到,抛出异常
如果父类异常捕获放在最前面,就会吞噬后面的子类异常 -
finally 不管有没有异常和异常有没有被捕获,都会执行 ,即使已经抛出异常并且已经return, finally体里面的代码都会运行
3、手动触发异常
raise手动触发异常
raise异常类(“说明信息”)
raise没有接异常类,默认抛出RuntimeError异常类
try:
print("start raise....")
# raise
# raise IndexError
raise IndexError("this is test")
except IndexError as i :
print("IndexError:this is test")
print(i)
except Exception as e:
print("exception error")
print(e)
4、嵌套异常
4.1 异常处理注意事项
* 只执行最先匹配的一个except
* 如果父类异常在最前面,会吞噬子类所有异常
* 多excpet注意:
只会匹配一个except
要先写子类异常再写父类异常
若果except捕获的错误与触发的错误不一致,程序会捕获不到
4.2 几点建议
不建议使用异常来代替常规的检查,如 if ... else判断
避免过多依赖于异常处理机制
在必要的时候,可以手动引发异常(raise)==>函数或方法
4.3 try/except/finally使用return
在finally中使用return,异常无法回溯
在函数中的try/except 语句中使用return后,仍然会执行finally 中的内容
- finally==>正常或异常都会执行
- return==> 直接退出函数,返回值给主程序
5、关于性能
执行脚本命令之前+time 获取命令执行的时间
可以发现for循环在try里面 好一点
6、Python2 VS Python3
6.1 输入输出
输入
python2: input默认接收int类型,str类型接收需要使用引号包起来
raw_input得到一个str类型
Python3: input得到str类型
输出
python2中:两种都可以
python3中:只能作为函数输出
>>> print "ok"
ok
>>> print("ok")
ok
6.2 数据类型/地板除
Python2:整型区分 长整型和整型
Python3:都是整型
>>> a=99999999999999999999999999999 # python2
<type 'long'>
>>> a=99999999999999999999999999999 # python3
>>> type(a)
<class 'int'>
Python2:实际是地板除,要想得到真除,变成浮点数再相除
Python3:就是真除
>>> 5/3 # python2 地板除,要想真除,只能将数据变成浮点型
1
>>> 5.0/3
1.6666666666666667
>>> 5/3 # python3 真除,除多少是多少。//才是地板除
1.6666666666666667
6.3 range与xrange
Python2:range(4),结果是一个列表生成[0,1,2,3];
xrange返回一个生成器,使用的时候再创建对象
Python3:range就是Python2的xrange
# 注:自己本身没有xrange函数
# python2
>>> range(4)
[0, 1, 2, 3] # 注:生成的是列表,一次性加载到内存里面,一开始就生成一个列表,一次性返回
>>> xrange(4) # 注:占的内存比range小
xrange(4)
# python3
>>> range(4) # 注:python3里没有xrange
range(0, 4) # 注:生成器,取的时候才生成这个数
6.4 异常机制
Python2:可以用 , (逗号)也可以用as
Python3:只能用as # 注:把信息赋给一个标识符的时候
try:
print("ok")
except Exception,e: # python2中用, python3中用as
print("exception error")
6.5 字符编码
Python2:默认编码为ascii码
Python3:默认编码方式utf-8
Python2中含有中文 要声明编码方式
#-*-coding: utf-8-*- # 注:方法1
encoding=utf-8 # 注:方法2
6.6 布尔类型
Python2:True、False可以定义成标识符,可以改变
Python3:True、False变成了关键字,不能修改
>>> True=2 # python2
>>> False=3
>>> True=2 # python3
File "<stdin>", line 1
SyntaxError: can't assign to keyword
6.7 模块导入
Python2:默认使用相对导入
Python3:默认是绝对导入
Python2 future
使用__future__模块 向后兼容 # 注:比如python2 想使用python3的语法
最后
以上就是粗心小笼包为你收集整理的Python 异常处理-python2/3差别1、常见异常类2、异常处理3、手动触发异常4、嵌套异常5、关于性能6、Python2 VS Python3的全部内容,希望文章能够帮你解决Python 异常处理-python2/3差别1、常见异常类2、异常处理3、手动触发异常4、嵌套异常5、关于性能6、Python2 VS Python3所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复