大数协python训练营打卡笔记Task03

一、学习知识点概要

①python标准异常总结 ②python标准警告总结 ③try-except语句 ④try-excpet-finally语句 ⑤try-except-else语句 ⑥raise语句

二、学习内容

1.Python 标准异常总结

大数协python训练营打卡笔记Task03

异常体系内部有层次关系,Python异常体系中的部分关系如下所示:

大数协python训练营打卡笔记Task03

2.Python标准警告总结

大数协python训练营打卡笔记Task03

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放后面(?)

大数协python训练营打卡笔记Task03

看了视频证明我的理解是对的:​​​​​​花了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("太大")

【输出效果】

大数协python训练营打卡笔记Task03

【问题】

①猜对数字后没有结束进程

尝试解决:尝试了在猜对数字的语句后面加了break 然后 它就再也不运行了 然后前面还出现了*号

大数协python训练营打卡笔记Task03

②在用户每次猜测之前程序没有输出用户是第几次猜测

③没有用到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('输入无效')

【输出效果】大数协python训练营打卡笔记Task03

 

 

四、学习思考与总结

1.对try和except提出了自己的一点思考

try下面是可能出现错误的地方

except是针对错误提出的解决

2.关于try-except-else-finally语句

大数协python训练营打卡笔记Task03

3.学习了获取随机数的方法

import random
a=1
b=100
print(random.randint(a,b))
import random
random.randint(1,100)

4.python中最常见的异常类型及举例:

大数协python训练营打卡笔记Task03

#(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 算是有了一个比较深刻的理解

上一篇:python-模块


下一篇:爬虫学习笔记2-异常的处理