| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 10_Python基础_Python异常处理 -> 正文阅读 |
|
[Python知识库]10_Python基础_Python异常处理 |
Python异常处理
?? ?
? ? 一、了解Python异常处理
?? ?? ? 在程序中为了增强健壮性,我们需要考虑异常处理方面的内容。比如在读取文件时要考虑文件不存在的情况,在做除法运算时要考虑除0的情况……。我们把这些可能产生的异常在程序中进行对应的处理保证程序不无故异常退出这就是异常处理。
?? ?? ? 做除法运算时的除0异常处理
?? ??? ?
?? ??? ??? ?
? ? 二、捕获程序中异常
?? ?? ? 就如上面的列子,我们不可以防止用户输入0,但是我们可以在产生这种情况后捕获到并处理异常,从而让程序不会因此而直接终止并退出。
?? ?? ? try-except语句
?? ??? ?? ? 通过try-except语句可以实现对异常的捕获,其语法结构如下:
try:
? ? 可能产生异常的语句
except [异常类型]:
? ? 处理异常
?? ?? ? 结构说明:
?? ??? ?? ? 1、try后要有英文半角冒号
?? ??? ?? ? 2、可能产生异常的语句,处理异常前都要做缩进处理(Python中推进使用4个半角空格)
?? ??? ?? ? 3、异常类型那个声明是可以省略的
?? ?
# coding=utf-8
i = input("请输入数字:")
n = 100
try:
????result = n / int(i)
????print(result)
????print("{0}除以{1}等于{2}".format(n,i,result))
except Exception as??e:
????print("不可以除以0,异常:{}".format(e))
上面except后的Exception也可以替换为ZerDivisionError,因为实际上除0产生的异常类型就是ZerDivisionError。
? ? 多个except代码块
?? ?? ? 多条语句可能会产生多种不同的异常,对于每一种异常都会采用不同的处理方式,对于这个情况可以在try后跟多个except代码块
# coding=utf-8
i = input("请输入数字:")
n = 100
try:
????result = n / int(i)
????print(result)
????print("{0}除以{1}等于{2}".format(n,i,result))
except ZeroDivisionError as e1:
????print("产生异常:{}".format(e1))
except ValueError as??e2:
????print("产生异常:{}".format(e2))
? ? 这里分别捕获两个不同的异常:ZeroDivisionError、ValueError
? ? 多重异常捕获
?? ?? ? 像上面一样如果我们要对多种异常做捕获,而多种异常的处理方式又是相同的,则可以在一个except中写入多个指定的异常
# coding=utf-8
i = input("请输入数字:")
n = 100
try:
????result = n / int(i)
????print(result)
????print("{0}除以{1}等于{2}".format(n,i,result))
except (ZeroDivisionError,ValueError) as ex:
????print("产生异常:{}".format(ex))
? ? try-except语句嵌套
# coding=utf-8
i = input("请输入数字:")
n = 100
try:
????i1 = int(i) #?这里可能产生异常,由外层的try捕获 ValueError
????try:
????????result = n / i1? ? #?这里可能产生异常,由里层的try捕获?ZeroDivisionError
????????print("{0}除以{1}等于{2}".format(n,i,result))
????except ZeroDivisionError as e1:
????????print("产生异常:{}".format(e1))
except ValueError as e:
????print("产生异常:{}".format(e))
? ? 三、finally代码块
?? ?? ? 有时候在try-except语句中会占用一些资源,如打开文件,网络连接、打开数据库及数据结果集……都会占用计算机资源,这些资源的占用都需要开发人员去释放,为了确保这些资源能被释放掉可以使用finally代码块,因为不管是否发生异常,finally代码块的语句都会执行到。
?? ?? ? try-except语句后面可以跟一个finally代码块,其语法如下:
try:
? ? 可能发生异常的语句
except?异常类型1:
? ? 处理异常
except?异常类型2:
? ? 处理异常
……
except:
? ? 处理异常
finally:
? ? 释放资源
?? ?? ??? ? 自定义异常类
?? ??? ??? ?? ? 自定义异常类,需要继承Exception类或其子类,前面我们说的ValueError和ZeroDivisionError都是属于Exception的子类。
?? ?? ??
# coding=utf-8
class MyException(Exception):
????def __init__(self,message):
????????super().__init__(message)
i = input("请输入数字:")
n = 100
def chu(n,i):
????if i > n:
????????raise MyException("除数大于被除数了!") # 手动触发一个异常?使用?raise
????else:
????????return n / i
try:
????result = chu(n,int(i))
????print("{0}除以{1}的结果是{2}".format(n,i,result))
except ZeroDivisionError as e:
????print("发生异常,{}".format(e))
except ValueError as e1:
????print("发生异常,{}".format(e1))
except MyException as e2:
????print("发生异常,{}".format(e2))
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 14:58:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |