文章目录
前言
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函数以及异常处理结构。今天的干活还是比较多的,大家要好好消化。
下节课的内容更加精彩,不容错过!
最后,一圈三连,点个关注!