|Python新手小白中级教程|第二十四章:神奇的type()函数&异常处理(try-except-else-finally)


前言

hello,今天我又来啦!迈入中级,大家需要学习的编程技能也越来越多了。今天,我们就来说两个非常常见的两个内容——异常与type()函数


第一部分:type函数

type函数,大白话就是判断类型用的函数
大家可以先打开IDLE的交互(>>>)口,跟着我一起练

1.type小试牛刀

这里我用了终端的Python,大家可以用idle,结果相同
在这里插入图片描述
大家依次在>>>处键入我打的东西,效果是完全相同的
接下来,我们来重点啃啃这个<class,’ '>的结果

2.理解结果

这个非常重要,因为type函数的作用是可以在某些情况下“救你一命”的

话不多说,我们先来看看输出与type“()”括号中的内容与输出的关系

>>> type(1)
<class 'int'>
>>> type('1')
<class 'str'>
>>> type(['1'])
<class 'list'>
>>> type((1,2,3))
<class 'tuple'>

这是所有的代码与输出
先来看看前几行

>>> type(1)
<class 'int'>

这里我们可以看到:type括号中的东西是一个整形数字(int格式)
所以,输出中反映了“1”的属性:整形(int)
所以,大家明白他的输出是怎么一回事了吗?接下来的亦是如此

>>> type('1')
<class 'str'>

我们知道,有‘ ’或是“ ”的都是字符串类型(str),所以,输出中表明了“1”的格式:str型

>>> type(['1'])
<class 'list'>

这里的[‘1’]是列表格式(list),所以输出中写明了[‘1’]的格式

>>> type((1,2,3))
<class 'tuple'>

这里是元组,大家应该不陌生
如果有遗忘,可以看看这篇文章
https://editor.csdn.net/md/?articleId=136281037
这是一篇讲元组的文章

所以,明白了type原理了吗?这就是看似神奇的type函数!

大家以后输出一个东西的时候,就可以一边输出内容,一边判断类型
格式类似这样:
在这里插入图片描述

第二部分:异常处理

1.初识异常处理结构

这个东东说难不难,说简单不简单。大家可以先记口诀:
finally代码段一定会被执行
有异常,执行except代码段
无异常,无return,执行else代码段
无异常,有return, try代码段有return语句, 不执行else代码段
无异常,有return, try代码段无eturn语句,执行else代码段

呼。。。看起来是不是一团乱?先来看看结构吧

try:
    pass
except:
    pass
else:
    pass
finally:
    pass

就这么简单。
接下来,我们来了解一下这个程序的原理。

2.程序与原理(无return)

这个程序的原理非常简单,但是初学理解时,还是有点生硬的
化繁为简,我们先看看try-except结构

(1)try-except

我们先来看一个例子
在这里插入图片描述
这里我们就要先了解try数据结构的原理了

这个try里面的内容呢我们暂且叫他“待判断是否存在异常代码块
像这个例子里,我们对元组进行了删除元素操作。但是,大家都知道,元组是不能给予删除操作的,除非它转化成列表之后再改变
所以,这里面有键入错误(typeerror),原因是我们强行修改了元组的内容
在这里插入图片描述
在这里插入图片描述
所以,我们的try语句中的内容我们将他们认定为“不合法”,即是“异常”的表现。
在这种情况下,try语句中又没有return出现,所以执行except中的语句
这样,就出现了我们的输出
在这里插入图片描述
怎么样,简单的try-except你学会了吗?
当然,如果try语句是合法的,那么就不会发生异常,会运行try语句中的内容

回复上面的过程,我们便可以把try语句检验是否异常的过程看做“异常检测”,这是对我们以后的编程大有帮助的,基础命令大家一定要学会

(2)try-except(高级)

其实,刚刚的只是基础结构
我们都知道,python中会触发各种各样的错误。而一旦在try结构中出现这样的错误,Python就会用except中的语句给你进行答复
这里,我们可以在except的后面加上我们想象中的错误类型
例如上面的例子,我们强行篡改了元组中的元素,所以造成了typeerror
所以上面的代码还可以改成这样:

try:
    tuple_1 = (1,2,3,4,5)
    del tuple_1[0:3]
    print('No problem')
except TypeError:#这里遵从上面错误显示的格式:
    print('NO,NO,NO!!!')

注意!这里typeerror的大小写要与Python编译器中的大小写一致,像这样:

TypeError: 'tuple' object does not support item deletion

这里的TypeError中,T和E分别大写了

这就是except的高级操作:选择错误输出
在这里,我们就可以写成这样,实现typeerror的意义

try:
    tuple_1 = (1,2,3,4,5)
    del tuple_1[0:3]
    print('No problem')
except TypeError:
    print('元组乱改会造成键入类型错误!!!')

怎么样,你学废了吗?

(3)使用raise语句主动写出错误

这个语句简称“作死”,就是自己给自己制造一些稀里糊涂的错误,这些错误会让Python觉得你很幼稚,甚至很傻。
在这里插入图片描述
在这段语句中,我们自己告诉自己:0不能作为分母
这就抛出错误的概念

另外,BoBo仔还整理了一些其他的Python内建错误:

BaseException-所有异常的基类
SystemExit-解释器请求退出
KeyboardInterrupt-用户中断执行(通常是输入^C)
Exception-常规错误的基类
Stoplteration-迭代器没有更多的值
GeneratorExit-生成器(Generator)发生异常来通知退出
ArithmeticError-所有数值计算错误的基类
FloatingPointError-浮点计算错误
OverflowError-数值运算超出最大限制
ZeroDivisionError-除(或取模)零(所有数据类型)
AssertionError-断言语句失败
AttributeError-对象没有这个属性
EOFError-没有内建输人,到达EOF标记
EnvironmentError-操作系统错误的基类
IOError-输人/输出操作失败
OSError-操作系统错误
ImportError-导入模块/对象失败
LookupError-无效数据查询的基类
IndexError-序列中没有此索引(Index
KeyError-映射中没有这个键
MemoryError-内存溢出错误(对于Python解释器不是致命的)
NameError-未声明/初始化对象(没有属性)
UnboundLocalError-访问未初始化的本地变量
ReferenceError-弱引用(WeakReference)试图访问已经垃圾回收了的对象
RuntimeError-一般的运行时错误
NotlmplementedError-尚未实现的方法
SyntaxError-Python语法错误
TabError-Tab和空格混用
SystemError-Tab和空格混用
TypeError-对类型无效的操作
ValueError-传入无效的参数
UnicodeError-Unicode相关的错误
UnicodeDecodeError-Unicode解码时的错误

(4)try-except-else语句

这个就是上面基础语句的进阶版,加了新元素else
换句话说,try里的东西符合except后面的错误类型,那么运行except的代码
但如果try木有问题,那么就会执行else里的
【警告:else后面不要带错误类型!!!】
示例如下:
在这里插入图片描述
这里的list格式是可以删除元素的,所以没有错误,执行else

(5)finally子语句

这个很简单,还是一开始的口诀:
finally代码段一定会被执行
有异常,执行except代码段
无异常,无return,执行else代码段
无异常,有return, try代码段有return语句, 不执行else代码段
无异常,有return, try代码段无return语句,执行else代码段

finally不管在什么时候都要执行,管你有没有错

至此,我们的所有判断语句基本格式全部学完了,接下来,我们就要迎接一名新成员了:

3.return出现时该结构发生的变化

这个还是看口诀
有异常,执行except代码段
无异常,无return,执行else代码段
无异常,有return, try代码段有return语句, 不执行else代码段
无异常,有return, try代码段无return语句,执行else代码段

注意看,这里有return的出现,也会影响try语句结构
下面,我们就来深入挖掘return与这些语句段的关系

(1)回忆return

return呢我们并不陌生,如果是我的fans,那么我之前的文章里一定是讲过的
想不起来的,可以看看这几篇文章
第一讲:
https://blog.csdn.net/m0_69481332/article/details/136090124?spm=1001.2014.3001.5502
第二讲:
https://blog.csdn.net/m0_69481332/article/details/136094617?spm=1001.2014.3001.5502
第三讲:https://blog.csdn.net/m0_69481332/article/details/136095045?spm=1001.2014.3001.5502

这里,我们说到了,return指的是返回值,在函数封装或是其他环境下都是极为常见的
这里的try语句中也能加入return,只不过要在def函数封装的情况下使用
我们来看一下具体的内容

(2)return在try且无异常时出现

def Exception():
    try:
        num = 1
        return num
    except NameError:
        print("num没有赋值")
    else:
        print('no problem')
        
Exception()

这里我们用到了函数调用,大家可以根据前面的文章浅浅复习一下
根据口诀,一旦return出现在无异常的try中,那么else不执行
所以,大家应该已经猜到输出了:那直接没有输出

(3)return不在try且无异常时出现

下面的例子里,我们发现return跑到except语句中去了,不在try里

在这里插入图片描述
所以,根据口诀,程序输出应该是else里的

大家学会了吗?


总结

这节课,我们学习了type函数以及异常处理结构。今天的干活还是比较多的,大家要好好消化。
下节课的内容更加精彩,不容错过!

最后,一圈三连,点个关注!

  • 14
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值