part2:什么是异常
异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
常用异常
异常处理
python解释器检测到错误,触发异常(也允许程序员自己触发异常)
程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)
如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理。
万能异常 在python的异常中,有一个万能异常:Exception,他可以捕获任意异常。
你说的没错,但是应该分两种情况去看
1.如果你想要的效果是,无论出现什么异常,我们统一丢弃,或者使用同一段代码逻辑去处理他们,那么骚年,大胆的去做吧,只有一个Exception就足够了。
2.如果你想要的效果是,对于不同的异常我们需要定制不同的处理逻辑,那就需要用到多分支了。
一:有人说:异常处理就是try...except,if啥的跟异常处理没关系----->我真特么无语了
很多人,根本没有搞清楚什么是异常处理,因为他们还没有搞清楚什么是异常,什么是处理,就混在一起去整了。
什么是异常,异常就是错误引发的结果
什么是处理,由于异常带来的是程序崩溃,处理的目的就是让程序在异常后跳转到其他逻辑去执行,不让程序崩溃
综上
if本身就可以来处理异常,只不过if的方式,对于不同代码段的同一种异常,需要重复写多分支的if,而这段多分支if与真正的工作无关,写多了你的程序可读性就会及其的差。
try..except的方式,只是python提供给你一种特定的语法结构去做这件事,对于不同代码的同一种异常,python为你定制了一中类型,一个expect就可以捕捉到
二:有人说:用if来做异常处理,缺点是有些异常是未知的,只要用try...except Exception就可以捕捉所有异常了,所以要使用异常处理----->我听的都哭了
首先,没有搞清楚什么是异常处理,他以为只有try...except才叫异常处理,我哭晕了一次
其次,他想表达的是使用try...except要好,但是理由说的太...,让我又哭晕了一次
try...excpet的多分支就好比if的多分支啊,if的else就好比try的Exception,只不过if是针对一种异常的多分支,针对不同段代码的同种类型错误,你需要重复写多分支if,而try是针对不同类型异常的多分支,可以把不同段代码放到一起,检测他们的同种类型错误==========》能说出上面红字的话,真是被蠢