异常及异常处理

本文介绍了Python中异常处理的关键概念,如try-except结构、异常类、return语句的使用和traceback模块的应用。
摘要由CSDN通过智能技术生成

异常及异常处理

异常机制的本质_调试核心理念

所谓异常处理,就是指程序在出现问题时依然可以正确的执行剩余的程序,而不会因为异常而终止程序执行。
python中引进了很多用来描述和处理异常的类,成为异常类。BaseException是所有异常的父类。

python中一切都是对象,异常也采用对象的方式来处理,处理过程:

  1. 抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象停止当前执行路径,并把异常对象提交给解释器。
  2. 捕获异常:解释器得到该异常后,寻找相应的代码来处理该异常。

try…except基本结构

try…except是最常见的异常处理结构,结构如下:

try:
被监控的可能引发异常的语句块
except BaseException as e:
异常处理语句块

try块包含着可能引发异常的代码,except块则用来捕捉和处理发生的异常。执行的时候,如果try块中没有引发异常,则跳过except块继续执行后续代码;执行的时候,如果try块中发生了异常,则跳过try块中的后续代码,跳到相应的except块中处理异常;异常处理完后,继续执行后续代码。

遇到异常的处理顺序
【操作】测试简单的0不能作除数异常

print('step0')
try:
	print('step1')
	a=3/0		#出现异常
	print('step2')		#被跳过
except BaseException as e:
	print('step3')
	print('e')
print('step4')

【操作】无异常时

print('step0')
try:
	print('step1')
	a=3/2		#未出现异常
	print('step2')		#依然执行
except BaseException as e:		#不进入except
	print('step3')
	print(e)
print('step4')

示例:循环输入数字,如果不是数字则处理异常,直到输入88,则结束循环。

While Ture:
	try:
		x=int(input('请输入一个数字:'))
		print('输入的数字:',x)
		if x==88:
			print('退出程序')
			break
	except 	BaseException as e:
		print('e')
		print('异常,输入的不是一个数字')
print('循环数字输入结束')

try…多个except结构

当出现多个异常时,按照先子类后父类的顺序,并且针对性的写出异常处理代码,为了避免遗漏可能出现的异常,可以在最后增加BaseException,结构如下:

try:
被监控的,可能出现异常的语句块
except Exception1:
处理Exception1的语句块
except Exception2:
处理Exception2的语句块
except Exception3:
处理Exception3的语句块

except BaseException:
处理可能遗漏的异常的语句块

【操作】

try:
	a=input('请输入一个被除数:')
	b=input('请输入一个除数:')
	c=float(a)/float(b)
	print(c)
except ZeroDivisionError:
	print('异常,除数不能为0')
except ValueError:
	print('异常,不能将字符串转化成数字')
except NameError:
	print('异常,变量不存在')
except BaseException as e:
	print(e)

try…except…else结构

try…except…else结构增加了“else”块。如果try块中没有抛出异常,则执行else块。如果try块中抛出异常,则执行except块,不执行else块。

try:
	a=input('请输入一个被除数:')
	b=input('请输入一个除数:')
	c=float(a)/float(b)
except BaseException as e:
	print(e)
else:
	print('除数的结果是:',c)

try…except…finally结构

try…except…finally结构中,finally块无论是否发生异常都会被执行;通常用来释放try块中申请的资源。
【操作】

try:
	a=input('请输入一个被除数:')
	b=input('请输入一个除数:')
	c=float(a)/float(b)
except BaseException as e:
	print(e)
else:
	print(c)
finally:
	print('我是finally中的语句,无论发生异常与否,都执行!')
print('程序结束')

【操作】

try:
	f=open('d:/a.text','r')
	content=f.readline()
	print(content)
except:
	print('文件未找到')
finally:
	print('run in finally。关闭资源')
print('程序执行结束')

return语句和异常处理问题

由于return有两种作用:结束方法运行、返回值。一般不把return放在异常处理结构中,而是放到方法最后。

def test01():
	print('step1')
	try:
		x=3/0
		#return 'a'
	except:
		print('step2')
		print('异常:0不能作为除数')
		#return 'b'
	finally:
		print('step4')
		#return 'd'
	print('step5')
	return 'e'		#一般不要将return语句放到try,except,else,finally块中,会发生一些意想不到的错误,建议放到方法最后。
print(test01())

traceback模块

使用traceback模块打印异常信息

import traceback
try:
	print('step1')
	num=1/0
except:
	traceback.print_exc()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值