①python标准异常总结 ②python标准警告总结 ③try-except语句 ④try-excpet-finally语句 ⑤try-except-else语句 ⑥raise语句
异常体系内部有层次关系,Python异常体系中的部分关系如下所示:
try: 检测范围(可能出现错误的地方) except Exception[as reason]: 出现异常后的处理代码(若出现错误 提出的解决方法)
流程:
①首先执行try语句
②若无异常,仅执行try语句,忽略except子句
③若有异常(执行try子句过程中出现异常),那么try子句余下部分将被忽略
(1)若except后的名称与异常类型相符,那么对应的except子句将被执行,最后执行try语句之后的代码
(2)若except后的名称都不与异常类型匹配,那么该异常将传递给上层的try中。
注意:
①一个try语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
②引发多个异常时要注意层次关系,要从最具针对性的异常到最通用的异常。(见层次关系图)(如先KeyError再LookupError)
③一个except语句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。
【例子】
try: s = 1 + '1' int("abc") f = open('test.txt') print(f.read()) f.close() except (OSError, TypeError, ValueError) as error: print('出错了!\n原因是:' + str(error)) # 出错了! # 原因是:unsupported operand type(s) for +: 'int' and 'str'
try: 检测范围 except Exception[as reason]: 出现异常后的处理代码 finally: 无论如何都会被执行的代码
①不管try子句里面有没有发生异常,finally子句都会执行。
②如果一个异常在try子句里被抛出,而又没有任何的except把它截住,那么这个异常会在finally子句执行后被抛出。
try: 检测范围 except: 出现异常后的处理代码 else: 如果没有异常执行这块代码
①如果在try子句执行时没有发生异常,Python将执行else语句之后的语句。若出现异常,则执行except语句之后的语句。
②使用except而不带任何异常类型,这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息,因为它捕获所有的异常。
【例子】
try: 检测范围 except(Exception1[, Exception2[,...ExceptionN]]]): 发生以上多个异常中的一个,执行这块代码 else: 如果没有异常执行这块代码
注意:else语句的存在必须以except语句的存在为前提,在没有except语句的try语句中使用else语句,会引发语法错误。
Python 使用raise语句抛出一个指定的异常。
【例子】
try: raise NameError('HiThere') except NameError: print('An exception flew by!') # An exception flew by!
我的理解是把被包含得最多的放在前 被包含的最少的例如BaseException放后面(?)
看了视频证明我的理解是对的:花了2万多买的Python教程全套,现在分享给大家,入门到精通(Python全栈开发教程)_哔哩哔哩_bilibili
思路:
①首先学习了随机数的获取方式:(取0-100之间的整数)
import random a=1 b=100 print(random.randint(a,b))
import random random.randint(1,100)
②输出"猜测一个0到100之间的整数"
temp = input ("猜测一个0到100之间的整数")
③运用循环语句 while 来拥有多次猜测数字的机会
④运用if语句来判断“太大” “太小” “恭喜你猜到了这个数是”
最终
【我写出的代码】
import random counts = 0 answer = random.randint(1,100) while counts == 0: temp = input ("猜测一个0到100之间的整数") guess = int(temp) counts = 0 if guess == answer: print("恭喜你猜到了这个数是",answer) else: if guess < answer: print("太小") else: print("太大")
【输出效果】
【问题】
①猜对数字后没有结束进程
尝试解决:尝试了在猜对数字的语句后面加了break 然后 它就再也不运行了 然后前面还出现了*号
②在用户每次猜测之前程序没有输出用户是第几次猜测
③没有用到try语句来显示:如果用户输入的根本不是一个数字,程序会告诉用户"输入无效"
try: …… except ValueException: print('输入无效')
【修改后的代码】
后面改了一点之后的效果 解决了问题③ 仍存在问题①和②:
import random counts = 0 answer = random.randint(1,100) try: while counts == 0: temp = input ("猜测一个0到100之间的整数") guess = int(temp) if guess == answer: print("恭喜你猜到了这个数是",answer) else: if guess < answer: print("太小") else: print("太大") except ValueError: print('输入无效')
【输出效果】
try下面是可能出现错误的地方
except是针对错误提出的解决
import random a=1 b=100 print(random.randint(a,b))
import random random.randint(1,100)
#(1)数学运算异常 #ZeroDivisionError 除(或取模)零(所有数据类型) print(10/0)
#IndexError,索引从0开始 要取第四个输入3 lst=[11,22,33,44] print(lst[4])
#KeyError(映射中没有这个键) dic={'name':'张三','age':20} print(dic['gender'])
#NameError 未声明/初始化对象(没有属性) print(num)
#SyntaxError Python语法错误 int a=20
#ValueError 传入无效参数 a=int('hello') #hello是字符串,不能转成十进制整数
①自己尝试着写出一段代码还是很有成就感的 虽然还有很多问题需要去解决和学习
②本次学习加笔记用时大概四个小时左右,参考视频有:花了2万多买的Python教程全套,现在分享给大家,入门到精通(Python全栈开发教程)_哔哩哔哩_bilibili 算是有了一个比较深刻的理解