最近有点忙,到现在快一个月没写了,罪过罪过,继续学习

异常:python程序在运行时,如果python解释器遇到一个错误,那么程序就会停止执行,并且会提示一些错误信息,这就是异常.

抛出异常:程序停止执行并提示错误信息的动作就是抛出异常.

比如下面这个例子:

num=int(input("请输入一个数字:"))print("报错了吧!弟弟")

如果我输入的是一个正确的数字,那么会得到下面的结果:

请输入一个数字:1报错了吧!弟弟

但是如果我输入非数字,将会得到下面的结果:

请输入一个数字:A

Traceback (most recent call last):
File"C:/Users/users/PycharmProjects/study/zixue_good/socket_py/raise_study.py", line 1, in num=int(input("请输入一个数字:"))
ValueError: invalid literalfor int() with base 10: 'A'

你会发现程序不止发生错误,就连我的"报错了吧!弟弟"都没有输出来.在程序的开发过程中,很多代码我们是不能确定是否正确;也就是说,在某些代码里面可能会存在异常(如果你是大佬,毫无错误,当我没说过),这时候,我们就需要捕获异常.

1.捕获异常

捕获异常的语法:

try:

尝试执行的代码(可能有错误的代码块)

except:

出现错误的处理(try里面的代码出现错误之后给点提示)

继续看上面的那个例子,现在代码改写成这样了:

try:

num=int(input("请输入一个数字:"))except:print("输入数字啊!猪")print("报错了吧!弟弟")

输入一个正确的数字,except里面的代码并不会执行,因为我的try里面并没有错误:

请输入一个数字:1报错了吧!弟弟

如果我输入一个非数字的字符,try里面出现错误,except就会执行,后面的print也会继续执行:

请输入一个数字:啊

输入数字啊!猪

报错了吧!弟弟

2.错误类型捕获

程序在执行的过程中,会有各种各样的类型错误,比如(

BaseException

所有异常的基类

SystemExit

解释器请求退出

KeyboardInterrupt

用户中断执行(通常是输入^C)

Exception

常规错误的基类

)这些类型错误,还有很多种类型错误,感兴趣的可以去菜鸟教程看一下,这里就不一一列举了.语法如下:

try:

#尝试执行的代码块
pass
except 错误类型1:
#针对错误类型1,对应的代码处理;
except (错误类型2,错误类型3):
#针对错误类型2和3,对应的代码处理;
except Exception as result:
print("未知错误%s"%result)

举个例子吧:

try:

num= int(input("请输入整数:"))
result= 8 /numprint(result)exceptValueError:print("请输入正确的整数")exceptZeroDivisionError:print("除 0 错误")

当我执行了上面的代码之后呢

如果我输入的是非数字字符,就会得到如下结果:

请输入整数:啊

请输入正确的整数

如果我输入0,就会得到如下结果:

请输入整数:0

除 0 错误

如果我输入正确的数字,就会得到如下结果:

请输入整数:2

4.0

但是在实际开发中,为了能够处理复杂的异常情况我们通常会使用下面这种写法:

try:
# 尝试执行的代码
pass
except 错误类型1:
# 针对错误类型1,对应的代码处理
pass
except 错误类型2:
# 针对错误类型2,对应的代码处理
pass
except (错误类型3, 错误类型4):
# 针对错误类型3 和 4,对应的代码处理
pass except
Exception as result:
# 打印错误信息
print(result)
else:
# 没有异常才会执行的代码
pass
finally:
# 无论是否有异常,都会执行的代码
print("无论是否有异常,都会执行的代码")
else 只有在没有异常时才会执行的代码
finally 无论是否有异常,都会执行的代码
try:
num= int(input("请输入整数:"))
result= 8 /numprint(result)exceptValueError:print("请输入正确的整数")exceptZeroDivisionError:print("除 0 错误")exceptException as result:print("未知错误 %s" %result)else:print("正常执行")finally:print("执行完成,但是不保证正确")

上面例子执行之后得到如下输出结果:

请输入整数:4

2.0正常执行

执行完成,但是不保证正确