python 自定义异常 finally

13.3 自定义异常

13.3.1 finally 关键字

finally:必须要执行的代码(释放资源、释放内存)
不论try中写文件的过程中是否有异常,finally中关闭文件的操作一定会执行。由于finally的这个特性,finally经常被用来做一些清理工作。

try:int(input("请你输入一个数字:"))
 except Exception as e: 
 print("出现异常") else:
 print("没有出现异常") 
 finally: 
 print("无论有没有异常,都会打印") 
 print("剩余的代码")
 def demo(msg): 
 try:
 int(input(msg)) 
 print("hello world") 
 return "A" 
 except Exception as e:
  print("处理异常") 
  return "B" 
  finally: 
  print("释放资源") 
  return "C" 
  res = demo(input(">>>>>:")) 
  print(res) 
  #控制台输入123 会打印出什么?

函数中,如果return后面存在finally,那么代码并不会直接返回,而是需要执行finally,再执行返回,所以finally会在return前执行
实际应用中,不推荐在finally中使用return返回

13.3.2 自定义异常

需要创建一个类,需要继承异常的父类(BaseException Exception)
在自定义异常类中,重写父类init方法

raise 语句可以自定义报错信息,raise后的语句是不会被执行了,因为已经抛出异常,控制流将会跳到异常捕捉模块
except 语句可以一个except后带多个异常,也可以用多个语句捕捉多个异常,分别做不同处理
except语句捕捉的异常如果没有发生,那么except里的语句块是不被执行的。而是执行else里的语句

class MyException(Exception):
 def __init__(self,msg): 
 Exception.__init__(self,msg) 
 def login(username,password):
  if username == None or username.strip() == "": 
  #raise关键字 抛出异常 
  raise MyException("对不起,用户名不能为空") 
  if password == None or password.strip() == "": 
  raise MyException("对不起,密码不能为空") 
  if __name__ == '__main__': 
  # login(None,None) try:
  login("张三", None) 
  except Exception as e:
  print("抓捕异常,异常是:",e)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值