python_异常(高级)

  • 异常(高级)
    回顾异常相关的语句:
try - except 	用来捕获异常通知
try - finally 	用来做一定要做的事情
raise	用来发出异常通知
assert	用来根据条件来发出AssertionErorr类型的异常通知
  • with语句
    语法:
	with 表达式1 [as 变量1], 表达式2 [as 变量2]:
		语句块
  • 作用:
    使用于对资源进行访问的场合,确保使用过程中不管是否发生异常,都会执行必须的’清理’操作,并释放资源

如:文件使用后自动关闭,线程中锁的自动获取和释放等
示例1:

#此示例示意try-except和try-finally组合对文件进行操作
def read_from_file(filename = 'info.txt'):
	try:					#处理文件打开异常
		f = open(filename)
		try:				#处理文件操作异常
			print('正在读取文件')
			n = int(f.read())
			print('n =',n)
		finally:
			f.close()	
			print('文件已经关闭')
	except OSError:
		print('文件打开失败')

示例2:

#此示例示意用太try-except和with语句组合来进行文件的操作
def read_from_file(filename = 'info.txt'):
	try:							#处理文件打开异常
		with open(filename) as f:	#with语句自动关闭文件
			print('正在读取文件')	#with用于资源访问场合
			n = int(f.read())
			print('n =',n)
			print('文件已经关闭')
	except OSError:
		print('文件打开失败')
  • 说明:能够用于with语句进行管理的对象必须是环境管理器
  • 环境管理器
    (1)类内有__enter__和__exit__实例方法的类被称为环境管理器
    (2)能够用with语句管理的对象必须是环境管理器
    (3)__enter__方法将在进入with语句时被调用,并返回由as变量管理的对象
    (4)__exit__将在离开with语句时被调用,且可以用参数来判断在离开with语句时是否有异常发生并作出相应的处理

示例:

#此示例示意环境管理器的定义和使用
class A:
	def __enter__(self):
		print('已进入with语句')
		return self 			#返回的对象将由as绑定
	def __exit__(self,exc_type,exc_val,exc_tb):
			'''此方法会在退出with语句时自动调用
			exc_type 在没有异常时为None,出现异常时为异常类型
			exc_val 在没有异常时为None,出现异常绑定错误对象
			exc_tb 在没有异常时为None,出现异常绑定reaceback
			'''
			if exc_type == None:
				print('已离开with语句,离开时状态正常')
			else:
				print('已离开with语句,离开时状态异常')
				print('异常类型是:',exc_type)
				print('错误对象是:',exc_val)
				print('traceback是:',exc_tb)

with A() as a:
	print('这是with语句内的一条语句')
	#这里若发生异常仍回调用exit语句
	num = int(input('请输入一个整数:')) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值