Python 异常处理之try...except

文章目录介绍

  1. 什么是异常
  2. try…excpt的使用
    2.1 语法介绍
    2.2 执行流程
    2.3 异常类型的查看
  3. try…except…else
  4. try…except…finally

1. 什么是异常

在执行python程序时,会有出现错误的可能。导致出错的原因有一般两种:
1.语法错误:程序员编写的代码不符合python的规范,比如把print写成了printf,此种错误一旦出现会导致程序无法正常启动,但是此类错误是可以避免的。
2.异常:异常是指在程序运行的过程中由于用户的非法输入,环境的不稳定,突然断网等等不可控的因素导致程序无法正常处理,比如做除法运算时,用户输入了除数为0的式子。这些情况需要靠python提供的异常处理机制来解决。
代码的健壮性的一方面就体现在:程序是否有完备的异常处理,能够保证在程序运行时遇到非法输入,系统崩溃,突然断网等意外时可以给出对应的错误提示,使程序正常退出。

2. try…excpt的使用

2.1 语法介绍

python会捕获到try中的异常,并且当try中某一行出现异常后,后面的代码将不会再被执行;而是直接调用except中的代码

try…except是python为程序员提供处理异常的一种措施;语法如下:

try:
	可能出现异常的代码
except (Error1, Error2, Error3, ...) as e:
	处理异常的代码
except [Exception]:
	处理异常的代码

-> Error: 异常类型,一个except代码块可以同时处理多种异常类型
-> Exception : 表示所有异常类型,一般用在最后一个except块中

值的注意的是except和except Exception的作用是一样的,都是处理所有的异常类型。

# 例子:
try:
    print(ss)
except (ZeroDivisionError, NameError) as e:
    print('出现了除0错误和访问未声明变量错误中的一种')
except:
    print('其他错误类型')

---------------------------------
输出结果
出现了除0错误和访问未声明变量错误中的一种
此处Python在try语句中捕获到了异常类型为NameError,因此执行了第一个except代码块中的代码。

2.2 执行流程

try...except语句的执行流程非常简单,可分为两步:
	1.执行try语句中的代码,如果出现异常,Python会得到异常的类型
	2.Python将出现的异常类型和except语句中的异常类型做对比,调用对应except语句中的代码块

2.3 异常类型的查看

# 比如上面的一段代码
try:
    print(ss)
except (ZeroDivisionError, NameError) as e:
    print('出现了除0错误和访问未声明变量错误中的一种')
except:
    print('其他错误类型')
如果想看异常的详细信息,有四种方法:
	1.e.args : 返回异常信息,元组
	2.str(e):返回异常信息,字符串
	3.repr(e):返回异常类型,异常信息
	4.直接打印e

通过上面三种方法都能查看异常的信息,但是稍有区别,详见代码

try:
    print(ss)
except Exception as e:
    print(e.args)  # ("name 'ss' is not defined",)
    print(str(e))  # name 'ss' is not defined
    print(repr(e))  # NameError("name 'ss' is not defined")
    print(e)  # name 'ss' is not defined

try…except…else

else的功能:当try中的代码没有异常时,会调用else中的代码。
	try...except..else的使用和try...except相同,只不过多了else代码,else中的代码只有当try中的代码块没有发现异常的时候才会调用。
# 如下:
a = 1
while True:
    b = int(input('请输入除数:'))
    try:
        n = a/b
    except Exception:
        print('出现异常')
    else:
        print('程序正常执行')
        print(n)
  
--------------------------------------------------------------
# 输出结果
1 请输入除数:0
2 出现异常
3 请输入除数:1
4 程序正常执行
5 1.0
6 请输入除数:2
7 程序正常执行
8 0.5

注意:else中的代码只有当try中的代码没有出现异常时才会被执行;并且else要和try…except配合使用,如果使用了else,则代码中不能没有except,否则会报错

a = 1
while True:
    b = int(input('请输入除数:'))
    try:
        n = a/b
    else:
        print('程序正常执行')
        print(n)
-----------------------------------------------------------------
# 由于没有except,因此python会报错
1  File "e:\code\python\py_study\tt.py", line 6
2    else:
3    ^
4  SyntaxError: invalid syntax

4. try…except…finally

finally的功能:不管try中的代码是否有异常,最终都会调用finally中的代码
	finally可以结合try...except,try...except...else使用,也可以仅有try和finally。
# 如下:
a = 1
b = 0
try:
    a/b
finally:
    print('finally')
---------------------------------------------------------------
# 结果:
1 finally
2 Traceback (most recent call last):
3  File "e:\code\python\py_study\tt.py", line 4, in <module>
4   a/b
5  ZeroDivisionError: division by zero
由于没有except处理错误,python会抛出异常,但是你会发现,python在抛出异常之前先执行finally中的代码。
同时,还需要注意一点的是,一定要避免在finally中编写return,raise等会终止函数的语句。否则很容易会产生不符合预期的操作。
最终,这一套操作的执行流程大致如下:

执行的流程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值