(九)python异常处理

一、 异常

   在出现异常的时候,捕获异常并处理,保证程序不会中断。(中括号即 可以省略)

请添加图片描述

请添加图片描述
例如:

#coding=utf-8

i = input('请输入数字:')
n = 8888
try:
	result = n / int(i)
	print(result)
	print('{0}除以{1}等于{2}'.format(n, i, result))
except ZeroDivisionError as e:  
	print("不能除以0,异常:{}".format(e))

二、多个except异常代码块

请添加图片描述

  不同类型异常要给用户不同的处理方案,所以要有多个except代码块将异常分门别类的去处理。

#coding=utf-8

i = input('请输入数字:')
n = 8888
try:
	result = n / int(i)
	print(result)
	print('{0}除以{1}等于{2}'.format(n, i, result))
except ZeroDivisionError as e:  
	print("不能除以0,异常:{}".format(e))
except ValueError as e:
	print("输入的是无效数字,异常:{}".format(e))

三、多重异常捕获:

  如果多个exce代码块的异常处理过程类似,则可以合并处理。异常类型用逗号分隔。

i = input('请输入数字:')
n = 8888
try:
	result = n/int(i)
	print(result)
	print('{0}除以{1}等于{2}'.format(n, i, result))
except (ZeroDivisionError, ValueError) as e:
	print("异常发生:{}".format(e))

四、try-except语句嵌套

  • 只有有因果关系的才值得使用嵌套。
  • 第一个try:如果用户输入的是一些非数字类型的字符串,则捕获异常,将其转换成为有效数字,若转换不了则进行14行except代码块处理。
i = input('请输入数字:')
n = 8888

try:
	i2 = int(i)
	try:
		result = n/i2
		print('{0}除以{1}等于{2}'.format(n, i2, result))
	except ZeroDivisionError as e1:
		print("不能除以0,异常:{}".format(e1))
except ValueError as e2:
	print("输入的是无效数字,异常:{}".format(e2))

请添加图片描述

五、 使用finally代码块释放资源

  有时在try-except语句中会占用一些资源,可以使用finally代码块释放资源(保证打开文件后给它关闭)。无论程序走的异常还是正常结束,都会调用finally代码块。
请添加图片描述
请添加图片描述

i = input('请输入数字:')
n = 8888

try:
	result = n / int(i)
	print(result)
	print('{0}除以{1}等于{2}'.format(n, i, result))
except ZeroDivisionError as e:
	print("不能除以0,异常:{}".format(e))
except ValueError as e:
	print("输入的是无效数字,异常:{}".format(e))
finally:
	#释放资源源代码
	print('资源释放...')

请添加图片描述

六、自定义异常类

  定义一个异常类,继承Exception父类(由python官方提供的类)。

#coding=utf-8
class ZhijieketangException(Exception):
	def _init_(self,message):
		super()._init_(message)
  • 构造方法,message为异常的错误消息。
  • 需要调用父类的构造方法,将message消息传给父类。

七、手动引发异常:

  可能没有产生,但是用户就想让其引发异常,即可以通过程序代码引发异常,即将自定义异常引发使用。

  • raise语句:可以引发任何类型的异常。
  • 使用手动引发异常的目的:由于自定义的一个异常需要引发使用。
class ZhijieketangException(Exception):
	def _init_(self, message):
		super()._init_(message)

i = input('请输入数字:')
n = 8888
try:
	result = n / int(i)
	print(result)
	print('{0}除以{1}等于{2}'.format(n, i, result))
except ZeroDivisionError as e:
	#print("不能除以0,异常:{}".format(e))
	raise ZhijieketangExcept('不能除以0')
except ValueError as e:
	#print("输入的是无效数字,异常:{}".format(e))
	raise ZhijieketangException('输入的是无效数字')

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤傲倾城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值