异常?
简单的说异常就是程序运行过程中出现的各种各样的错误。
异常处理:
解决或者处理我们的异常问题。
错误与异常的分类:
BaseException 所有异常的基类*
AssertError 断言语句(assert)失败
AttributeError 尝试访问未知的对象属性
EOFError 用户输入文件末尾标志EOF(Ctrl+d)
FloatingPointError 浮点计算错误
GeneratorExit generator.close()方法被调用的时候
ImportError 导入模块失败的时候*
IndexError 索引超出序列的范围*
KeyError 字典中查找一个不存在的关键字*
KeyboardInterrupt 用户输入中断键(Ctrl+c)
MemoryError 内存溢出(可通过删除对象释放内存)
NameError 尝试访问一个不存在的变量*
NotImplementedError 尚未实现的方法
OSError 操作系统产生的异常(例如打开一个不存在的文件)*
OverflowError 数值运算超出最大限制
ReferenceError 弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象
RuntimeError 一般的运行时错误
StopIteration 迭代器没有更多的值*
SyntaxError Python的语法错误*
IndentationError 缩进错误*
TabError Tab和空格混合使用*
SystemError Python编译器系统错误
SystemExit Python编译器进程被关闭
TypeError 不同类型间的无效操作*
UnboundLocalError 访问一个未初始化的本地变量(NameError的子类)
UnicodeError Unicode相关的错误(ValueError的子类)
UnicodeEncodeError Unicode编码时的错误(UnicodeError的子类)
UnicodeDecodeError Unicode解码时的错误(UnicodeError的子类)
UnicodeTranslateError Unicode转换时的错误(UnicodeError的子类)
ValueError 传入无效的参数
ZeroDivisionError 除数为零
异常处理专用语法(流程控制中的一种):
格式1:
try:
尝试执行代码
except:
处理或者显示错误
格式2:
try:
尝试执行代码
except 错误类型:
处理或者显示错误
格式3:
try:
尝试执行代码
except 错误类型 as 变量:
处理或者显示错误
格式4:
try:
尝试执行代码
except 错误类型 as 变量:
处理或者显示错误
except 错误类型 as 变量:
处理或者显示错误
except 错误类型 as 变量:
处理或者显示错误
...
格式5:
try:
尝试执行代码
except 错误类型 as 变量:
处理或者显示错误
except 错误类型 as 变量:
处理或者显示错误
except 错误类型 as 变量:
处理或者显示错误
...
except:
处理或者显示错误
格式6:
try:
尝试执行代码
except 错误类型 as 变量:
处理或者显示错误
except 错误类型 as 变量:
处理或者显示错误
except 错误类型 as 变量:
处理或者显示错误
...
except:
处理或者显示错误
else:
程序没有异常的时候执行的区域
格式7:
try:
尝试执行代码
except 错误类型 as 变量:
处理或者显示错误
except 错误类型 as 变量:
处理或者显示错误
except 错误类型 as 变量:
处理或者显示错误
...
except:
处理或者显示错误
else:
程序没有异常的时候执行的区域
finally:
无论程序执行是否出现异常都会执行的区域
注意:try…except 不可以当作if…else使用
raise语句:
主动触发异常
raise 异常类(参数)
注:raise语句主动抛出异常,参数为可选。不选为空,选择即为异常的名称。
如:
try:
raise NameError("名称错误")
except NameError as f:
print(f)
自定义异常类型:
class 异常类型名称(Exception):
类成员...
类成员...
如何使用自定义异常类:
自定义异常类:一般继承Exception,也可继承baseException
raise 异常对象("异常描述")
例:
class TanError(Exception):
pass
def ages():
age=int(input('输入年龄:'))
if age<=0 or age>100:
raise TanError('年龄只能在0到100岁之间')
# raise 会抛出一个异常
try:
ages()
except TanError as tan: # 如果输出定义好的错误说明必须用as
print(tan)