一、学习知识点概要
①python标准异常总结 ②python标准警告总结 ③try-except语句 ④try-excpet-finally语句 ⑤try-except-else语句 ⑥raise语句
二、学习内容
1.Python 标准异常总结
异常体系内部有层次关系,Python异常体系中的部分关系如下所示:
2.Python标准警告总结
3.try - except 语句
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'
4.try - except - finally 语句
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
finally:
无论如何都会被执行的代码
①不管try子句里面有没有发生异常,finally子句都会执行。
②如果一个异常在try子句里被抛出,而又没有任何的except把它截住,那么这个异常会在finally子句执行后被抛出。
5.try - except - else 语句
try:
检测范围
except:
出现异常后的处理代码
else:
如果没有异常执行这块代码
①如果在try子句执行时没有发生异常,Python将执行else语句之后的语句。若出现异常,则执行except语句之后的语句。
②使用except而不带任何异常类型,这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息,因为它捕获所有的异常。
【例子】
try:
检测范围
except(Exception1[, Exception2[,...ExceptionN]]]):
发生以上多个异常中的一个,执行这块代码
else:
如果没有异常执行这块代码
注意:else语句的存在必须以except语句的存在为前提,在没有except语句的try语句中使用else语句,会引发语法错误。
6.raise语句
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('输入无效')
【输出效果】
四、学习思考与总结
1.对try和except提出了自己的一点思考
try下面是可能出现错误的地方
except是针对错误提出的解决
2.关于try-except-else-finally语句
3.学习了获取随机数的方法
import random
a=1
b=100
print(random.randint(a,b))
import random
random.randint(1,100)
4.python中最常见的异常类型及举例:
#(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是字符串,不能转成十进制整数
5.总结
①自己尝试着写出一段代码还是很有成就感的 虽然还有很多问题需要去解决和学习
②本次学习加笔记用时大概四个小时左右,参考视频有:花了2万多买的Python教程全套,现在分享给大家,入门到精通(Python全栈开发教程)_哔哩哔哩_bilibili 算是有了一个比较深刻的理解