Flask接口签名sign原理与实例代码浅析
474
2022-08-26
Python 异常 try except(python入门教程(非常详细))
仅用学习参考
目标
异常的概念捕获异常异常的传递抛出异常
01. 异常的概念
程序开发时,很难将 所有的特殊情况 都处理的面面俱到,通过 异常捕获 可以针对突发事件做集中的处理,从而保证程序的 稳定性和健壮性
02. 捕获异常
2.1 简单的捕获异常语法
在程序开发中,如果对某些代码的执行不能确定是否正确,可以增加 try(尝试) 来 捕获异常捕获异常最简单的语法格式:
try: 尝试执行的代码 except: 出现错误的处理
try 尝试,下方编写要尝试代码,不确定是否能够正常执行的代码except 如果不是,下方编写尝试失败的代码
简单异常捕获演练 —— 胖子老板:说说你要买多少钱的烟
In [2]: try: ...: price = int(input("胖子老板:你想要买多少钱的烟呀:")) ...: except: ...: print("请输入正确的数字") ...: 胖子老板:你想要买多少钱的烟呀:12In [4]: try: ...: price = int(input("胖子老板:你想要买多少钱的烟呀:")) ...: except: ...: print("请输入正确的数字") ...: 胖子老板:你想要买多少钱的烟呀:sad请输入正确的数字
2.2 错误类型捕获
在程序执行时,可能会遇到不同类型的异常,并且需要 针对不同类型的异常,做出不同的响应,这个时候,就需要捕获错误类型了语法如下:
try: # 尝试执行的代码 passexcept 错误类型1: # 针对错误类型1,对应的代码处理 passexcept (错误类型2, 错误类型3): # 针对错误类型2 和 3,对应的代码处理 passexcept Exception as result: print("未知错误 %s" % result)
当Python 解释器抛出异常时,最后一行错误信息的第一个单词,就是错误类型
In [5]: price = int(input("胖子老板:你想要买多少钱的烟呀:"))胖子老板:你想要买多少钱的烟呀:asdasd---------------------------------------------------------------------------NameError Traceback (most recent call last)
可以从上面看出错误类型是 NameError
异常类型捕获演练 —— 胖子老板:你给的烟钱可不可以给个整数呀?
需求
提示输入一个整数检查是否NameError异常
In [6]: try: ...: price = int(input("胖子老板:你想要买多少钱的烟呀:")) ...: except NameError: ...: print("NameError异常") ...: 胖子老板:你想要买多少钱的烟呀:asdsaNameError异常In [7]:
捕获未知错误
在开发时,要预判到所有可能出现的错误,还是有一定难度的如果希望程序无论出现任何错误,都不会因为 Python 解释器 抛出异常而被终止,可以再增加一个 except语法如下:
except Exception as result: print("未知错误 %s" % result)
2.3 异常捕获完整语法 - 胖子老板问烟钱最后完整异常版本
在实际开发中,为了能够处理复杂的异常情况,完整的异常语法如下:
提示:有关完整语法的应用场景,在后续学习中,结合实际的案例会更好理解现在先对这个语法结构有个印象即可
try: # 尝试执行的代码 passexcept 错误类型1: # 针对错误类型1,对应的代码处理 passexcept 错误类型2: # 针对错误类型2,对应的代码处理 passexcept (错误类型3, 错误类型4): # 针对错误类型3 和 4,对应的代码处理 passexcept Exception as result: # 打印错误信息 print(result)else: # 没有异常才会执行的代码 passfinally: # 无论是否有异常,都会执行的代码 print("无论是否有异常,都会执行的代码")
else 只有在没有异常时才会执行的代码finally 无论是否有异常,都会执行的代码再写一个胖子老板问价钱的完整捕获异常的代码如下:
In [9]: try: ...: price = int(input("胖子老板:你想要买多少钱的烟呀:")) ...: except NameError: ...: print("NameError异常") ...: except Exception as result: ...: print("未知错误 %s" % result) ...: else: ...: print("胖子老板:要这个%s价钱是吧" % price) ...: finally: ...: print("胖子老板:你要是没钱,我送你一包也可以的啦。") ...: 胖子老板:你想要买多少钱的烟呀:17胖子老板:要这个17价钱是吧胖子老板:你要是没钱,我送你一包也可以的啦。In [10]: try: ...: price = int(input("胖子老板:你想要买多少钱的烟呀:")) ...: except NameError: ...: print("NameError异常") ...: except Exception as result: ...: print("未知错误 %s" % result) ...: else: ...: print("胖子老板:要这个%s价钱是吧" % price) ...: finally: ...: print("胖子老板:你要是没钱,我送你一包也可以的啦。") ...: 胖子老板:你想要买多少钱的烟呀:asdasdNameError异常胖子老板:你要是没钱,我送你一包也可以的啦。In [11]:
03. 异常的传递 - 胖子老板:你想要买多少钱的烟呀
异常的传递 —— 当 函数/方法 执行 出现异常,会 将异常传递 给 函数/方法 的 调用一方如果传递到主程序,仍然 没有异常处理,程序才会被终止
提示
在开发中,可以在主函数中增加异常捕获而在主函数中调用的其他函数,只要出现异常,都会传递到主函数的异常捕获 中这样就不需要在代码中,增加大量的异常捕获,能够保证代码的整洁需求
定义函数demo1()胖子老板:你想要买多少钱的烟呀定义函数demo2() 调用demo1()在主程序中调用demo2()
In [11]: def demo1(): ...: return int(input("胖子老板:你想要买多少钱的烟呀:")) ...: In [12]: def demo2(): ...: return demo1() ...: In [13]: In [13]: try: ...: print(demo2()) ...: except NameError: ...: print("NameError异常") ...: except Exception as result: ...: print("未知错误 %s" % result) ...: 胖子老板:你想要买多少钱的烟呀:asdNameError异常In [14]: try: ...: print(demo2()) ...: except NameError: ...: print("NameError异常") ...: except Exception as result: ...: print("未知错误 %s" % result) ...: 胖子老板:你想要买多少钱的烟呀:1717In [15]:
可以从上面的代码看出来,demo1的异常是可以传递到demo2来处理的。
04. 抛出 raise 异常 - 胖子老板:收钱,不够就抛出异常
注意:抛出异常,不是抛出媚眼
4.1 应用场景
在开发中,除了代码执行出错 Python 解释器会 抛出 异常之外还可以根据应用程序 特有的业务需求 主动抛出异常示例提示用户输入烟钱,如果 价格少于 18,抛出 异常注意当前函数只负责 提示用户输入烟钱,如果 烟钱价格低于18元,需要其他的函数进行额外处理因此可以抛出异常,由其他需要处理的函数 捕获异常
4.2 抛出异常
Python 中提供了一个 Exception 异常类在开发时,如果满足特定业务需求时,希望 抛出异常,可以:
创建 一个 Exception 的 对象使用raise 关键字 抛出 异常对象
需求
定义input_price 函数,提示胖子老板:收钱如果用户输入价格 < 18,抛出异常如果用户输入价格 >=18,返回胖子老板:你的烟,忠于你的蓝利群
In [2]: def input_price(): ...: ...: # 收钱 ...: price = input("胖子老板:收钱") ...: ...: # 看钱够不够 ...: if int(price) >= 18: ...: return price ...: ...: # 钱不够,需要抛出异常 ...: # 1> 创建异常对象 - 使用异常的错误信息字符串作为参数 ...: ex = Exception("钱不够") ...: ...: # 2> 抛出异常对象 ...: raise ex ...: In [3]: In [3]: try: ...: price = input_price() ...: print(price) ...: except Exception as result: ...: print("发现错误:%s" % result) ...: 胖子老板:收钱1818In [4]: try: ...: price = input_price() ...: print(price) ...: except Exception as result: ...: print("发现错误:%s" % result) ...: 胖子老板:收钱17发现错误:钱不够In [5]:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~