Python异常处理
一、异常和错误
1、语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正)
#语法错误示范一
if
#语法错误示范二
def test:
pass
#语法错误示范三
print(haha
2、逻辑错误
#用户输入不完整(比如输入为空)或者输入非法(输入不是数字)
num=input(">>: ")
int(num)
#无法完成计算
res1=1/0
res2=1+'str'
3、什么是异常?
异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下
4、python中的异常种类
常用异常
错误类 | 错误描述 |
---|---|
IOError | 输入/输出异常;基本上是无法打开文件 |
AttributeError | 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x |
ImportError | 无法引入模块或包;基本上是路径问题或名称错误 |
IndentationError | 语法错误(的子类) ;代码没有正确对齐 |
IndexError | 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] |
KeyError | 试图访问字典里不存在的键 |
KeyboardInterrupt | Ctrl+C被按下 |
NameError | 使用一个还未被赋予对象的变量 |
SyntaxError | Python代码非法,代码不能编译(个人认为这是语法错误,写错了) |
TypeError | 传入对象类型与要求的不符合 |
UnboundLocalError | 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它 |
ValueError | 传入一个调用者不期望的值,即使值的类型是正确的 |
更多异常
错误类 |
---|
ArithmeticError |
AssertionError |
AttributeError |
BaseException |
BufferError |
BytesWarning |
DeprecationWarning |
EnvironmentError |
EOFError |
Exception |
FloatingPointError |
FutureWarning |
GeneratorExit |
ImportError |
ImportWarning |
IndentationError |
IndexError |
IOError |
KeyboardInterrupt |
KeyError |
LookupError |
MemoryError |
NameError |
NotImplementedError |
OSError |
OverflowError |
PendingDeprecationWarning |
ReferenceError |
RuntimeError |
RuntimeWarning |
StandardError |
StopIteration |
SyntaxError |
SyntaxWarning |
SystemError |
SystemExit |
TabError |
TypeError |
UnboundLocalError |
UnicodeDecodeError |
UnicodeEncodeError |
UnicodeError |
UnicodeTranslateError |
UnicodeWarning |
UserWarning |
ValueError |
Warning |
ZeroDivisionError |
二、异常处理
1、基本语法
try:
被检测的代码块
except 异常类型:
try中一旦检测到异常,就执行这个位置的逻辑
f = open('b.txt')
g = (line.strip() for line in f)
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
except StopIteration:
f.close()
next(g)会触发迭代f,依次next(g)就可以读取文件的一行行内容,无论文件a.txt有多大,同一时刻内存中只有一行内容。
提示:g是基于文件句柄f而存在的,因而只能在next(g)抛出异常StopIteration后才可以执行f.close()
2、异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。
# 未捕获到异常,程序直接报错
s1 = 'hahaha'
try:
int(s1)
except IndexError as e:
print(e)
3、多分支异常处理
s1 = 'hahaha'
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
4、万能异常 在python的异常中,有一个万能异常:Exception,他可以捕获任意异常
s1 = 'hahaha'
try:
int(s1)
except Exception as e:
print(e)
5、异常的其他机构
s1 = 'hahaha'
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
#except Exception as e:
# print(e)
else:
print('try内代码块没有异常则执行我')
finally:
print('无论异常与否,都会执行该模块')
6、主动触发异常
try:
raise TypeError('类型错误')
except Exception as e:
print(e)