栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python基础语法(十三)--异常处理

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python基础语法(十三)--异常处理

目录
  • 异常概述
  • 异常捕获与处理
    • try-except语句
        • 案例一:实现程序异常捕获
    • 使用as获取异常信息
        • 案例二:使用as 语句返回捕获的异常
    • try-except-else语句
        • 案例三:异常捕获时else语句的使用
    • try-finally语句
        • 案例四:异常捕获时finally语句的使用
  • 触发异常
    • raise语句
    • assert语句
  • 自定义异常
        • 案例五:自定义一个只能取正数的类

异常概述

异常是指程序运行时引发的错误,引发错误的原因有很多,如语法错误、逻辑错误等,若这些错误没有进行处理,将会导致程序终止运行
在程序中,当python检测到一个错误时,解释器就会指出当前的流程无法继续执行下去,同时会给出错误的相关提示,如下面的例子:
上面的提示信息告诉我们字符串和整数不能相加,其中的TypeError是python内置的异常类,像这样的异常类python中还有很多
异常类

异常类描述
Exception所有异常的基类
ZeroDivisionError除数为0
TypeError传入对象类型不合要求
NameError变量未声明
IndexError索引超出序列范围
KeyError请求一个不存在的字典关键字
ValueError传入给函数的参数类型不正确
AttributeError尝试访问未知的对象属性
异常捕获与处理

为了防止程序运行遇到异常而意外终止,开发时应对可能出现的异常进行捕获并处理,

try-except语句

语法格式:

try:
	可能出现异常的语句
except 异常类名:
	处理异常的语句
except 异常类名:
	处理异常的语句	
except ...
	...	

当try下面的某条语句出现错误程序就直接跳转至except语句,下面看一个程序举例

案例一:实现程序异常捕获
try:
	choice=''
	while choice!='f':
		a=int(input('请输入一个整数:'))
		b=int(input('请输入另外一个整数:'))
		print('a/b整数相除的结果是:',a/b)
		choice=input('是否继续进行:(是y否f):')
except ZeroDivisionError:
	print('除数不能为零!')	
except ValueError:
	print('输入的参数无效')	

运行结果

从上面的程序中我们可以看出,程序并没有执行try下面的print语句,因为程序捕获了一个除数为0的错误并进行了处理,所以程序能够正常结束

使用as获取异常信息

as语句将捕获的异常类转化为一个异常对象,通过异常对象名便可以访问异常信息
单一异常类信息

语法格式

try:
	可能出现异常的语句
except 异常类名 as 异常对象名:
	处理异常的语句	

多种异常类信息
语法格式:

try:
	可能出现的异常类
except (异常类名1,,异常类名2,..) as 异常对象名:
	处理异常的语句	
案例二:使用as 语句返回捕获的异常
try:
	choice=''
	while choice!='f':
		a=int(input('请输入一个整数:'))
		b=int(input('请输入另外一个整数:'))
		print('a/b整数相除的结果是:',a/b)
		choice=input('是否继续进行:(是y否f):')
except (ZeroDivisionError,ValueError) as e:
	print(type(e),e)	

运行结果

try-except-else语句

常用于处理未捕获到异常的情形,捕获异常成功时,else语句并不被执行

语法格式:

try:
	可能出现异常的语句
except 异常类名 as 异常对象名:
	捕获异常后的处理异常的语句	
else:
	未捕获到异常执行的语句	
案例三:异常捕获时else语句的使用
try:
	a=int(input('请输入一个整数:'))
	b=int(input('请输入另外一个整数:'))
	c=a/b
except	baseException as e:
	print('请检查输入的数据是否合法',e)	
else:
	print('程序执行结果为:',c)		

运行结果

try-finally语句

无论try语句中是否发生异常,finally语句块都会执行,常用于清理在try语句中执行的操作,如释放其占用的内存等
语法格式:

try:
	可能出现异常的语句
finally:
	其他语句	
案例四:异常捕获时finally语句的使用
try:
	file1=open('123.txt')
	line=file1.readline()
	print(line)
finally:
	file1.close()	
触发异常

触发异常有两种情况:

  1. 程序执行中因为错误自动触发异常
  2. 显式使用raise或assert语句手动触发异常
raise语句
  1. 通过类名触发异常
    只需要指明异常类便可以创建异常类的实例对象并触发异常
    语法格式:raise 异常类名

  2. 通过了实例对象触发异常
    只需要指明异常类的实例对象便可触发异常
    语法格式:raise 异常类的实例对象('指定异常信息')

assert语句

assert语句又称为断言语句,主要用于在程序中表达某个对象的某种判断条件
语法格式:assert 表达式 [,参数]
表达式为真时,不触发异常,表达式为假,触发AssertError异常,可选参数可以作为异常信息的一部分抛出

自定义异常

python内置的异常类毕竟有限,用于可以根据需求设置其它异常

案例五:自定义一个只能取正数的类
class NumberError(Exception):	# 继承父类
	def __init__(self,data):
		super().__init__(self,data)	# 继承父类构造方法并添加一个参数
		self.data=data
	def __str__(self):
		return self.__class__.__name__+':'+self.data+'非法数值(负数)'	# __class__表示当前操作的对象的类,
try:
	num=input('请输入一个正数:')
	if int(num)<=0:
		raise NumberError(num)	
	print('输入的正数为:',num)
except baseException as e:
	print(e)			

运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/320061.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号