每天早上起床,你都有两个选择,不是选择平凡地度过今天,就是选择在今天创造属于你生命中的奇迹!
总结:
- Python 中比较奇怪的是错误被放到异常类中去;
- 尽可能的避免错误;尽可能的捕获、处理各种异常;
1. Python异常与错误处理基本概念
错误 Error
逻辑错误:算法写错了,加法写成了减法
笔误:变量名写错了,语法错误
函数或类使用错误,其实这也属于逻辑错误
总之,错误是可以避免的
异常 Exception
本意就是意外情况
这有个前提,没有出现上面说的错误,也就是说程序写的没有问题,但是在某些情况下,会出现一些意外,导致程序无法正常的执行下去。
例如open函数操作一个文件,文件不存在,或者创建一个文件时已经存在了,或者访问一个网络文件,突然断网了,这就是异常,是个意外的情况。
异常不可能避免
错误与异常
在高级编程语言中,一般都有错误和异常的概念,异常是可以捕获的,并被处理的;但是错误是不能被捕获的;
2. 常见的异常与错误种类
Python中不同的异常可以用不同的类型去标识,不同的类对象标识不同的异常,一个异常标识一种错误。
(1) AttributeError:试图访问一个对象没有的属性,比如foo.y,但是foo没有属性y
(2) IOError:输入/输出异常;基本上是无法打开文件
(3) ImportError:无法引入模块或包;基本上是路径问题或名称错误 (4) IndentationError:语法错误(的子类);代码没有正确对齐
(5) IndexError:下标索引超出序列边界
(6) KeyError:试图访问字典里不存在的键
(7) KeyBoardInterrupt:ctrl+c被按下(在cmd命令下)
(8) NameError:使用一个还未被赋予对象的变量
(9) SyntaxError:Python代码非法错误。代码不能编译
(10) TypeError:传入对象类型与要求的不符合
(11) UnboundLocalError:试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,才导致你以为正在访问它
(12) ValueError:传入一个调用者不期望的值,即使值的类型是正确的
3. 处理异常
抛出异常后,整个程序就会被终止,当然理想情况下,我们是希望程序不被终止,而是捕捉到这次异常。
try/except/finally语句
范例:
try:
尝试运行程序
出现异常后这段代码就不会运行
except 错误类 as e:
发生异常运行这部分代码
有多个异常错误时,这种写法就有局限性,我们可以这样来写:
#第一种方法
try:
print(1/0)
print(name)
except (ZeroDivisionError,NameError) as e:
print("错误:{}".format(e))
#第二种方法
try:
print(1/0)
print(name)
except ZeroDivisionError as e:
print("错误:{}".format(e))
except NameError as e:
print("错误:{}".format(e))
# 错误:division by zero
程序存在多个except异常时,程序最多只有一个会被执行并捕捉,简单的说,最先捕捉的异常会被执行,其他都会被忽略
事先并不知道有多少异常,应该怎么处理了?我们可以用Exception,他是其他非系统异常的基类。或者在except语句块后面不加异常类。
try:
print(1/0)
print(name)
except Exception as e:
print("错误:{}".format(e))
# except 后什么都不写,什么异常都捕获;
try:
print(1/0)
print(name)
except:
print("错误")
finally,其作用是不管有无异常,finally内的语句都会被执行。
finally 中一般放置资源,释放管理工作;
这里读取文件,不管是否出现异常,都会执行关闭文件的操作。
try:
f = open('test.txt','r')
except:
print('erro')
finally:
f.close()
网友评论