我是靠谱客的博主 粗心小笼包,最近开发中收集的这篇文章主要介绍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:TrueFalse可以定义成标识符,可以改变
Python3:TrueFalse变成了关键字,不能修改
>>> 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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部