最近有点忙, 到现在快一个月没写了, 罪过罪过, 继续学习
异常: 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 <module>
- num=int(input("请输入一个数字:"))
- ValueError: invalid literal for 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 / num
- print(result)
- except ValueError:
- print("请输入正确的整数")
- except ZeroDivisionError:
- 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 / num
- print(result)
- except ValueError:
- print("请输入正确的整数")
- except ZeroDivisionError:
- print("除 0 错误")
- except Exception as result:
- print("未知错误 %s" % result)
- else:
- print("正常执行")
- finally:
- print("执行完成, 但是不保证正确")
上面例子执行之后得到如下输出结果:
请输入整数: 4
2.0
正常执行
执行完成, 但是不保证正确
来源: https://www.cnblogs.com/xy-l/p/11363434.html