异常处理
异常概述
在程序运行的过程中会遇到各种各样的错误,这些错误统称为异常
python中常见的异常
异常 | 描述 |
---|---|
BaseException | 能捕获所有异常 |
Exception | 能捕获常见的异常类型 |
NameError | 尝试访问一个没有声明的变量引发的错误 |
IndexError | 索引超出序列范围应发的错误 |
IndentationError | 缩进错误 |
ValueError | 传入的值错误 |
KeyError | 请求一个不存在的字典关键字引发的错误 |
IOError | 输入输出错误(如要读取的文件不存在) |
ImporError | 导入模块时未找到相应的名称时引发的错误 |
AttributeError | 尝试访问未知的对象属性引发的错误 |
TypeError | 类型不合适引发的错误 |
MemoryError | 内存不足 |
ZeroDivisionError | 除数为0引发的错误 |
异常处理语句
try......except语句
语法格式如下:
block:表示可能出现错误的代码块
[ExceptionName [as alias]]:可选参数,用于指定要捕获的异常。其中ExceptionName表示要捕获的异常名称,as alias表示给异常指定一个别名,通过该别名,可以记录异常的具体内容
如果未指定异常名称,则默认捕获全部异常
try:
block1
except [ExceptionName [as alias]]
block2
try......except......else语句
在try......except语句上增加了else语句,主要作用是在try语句没有发现异常都是执行else语句,发现异常时不执行else语句
try:
num = int(input('请输入数字:'))
except ValueError as e:
print('输入错误!')
raise e
else:
print('没有错误!')
try......except......else......finally语句
在try......except......else语句上增加了finally语句,主要作用是无论程序是否产生异常,finally中的语句都将被执行
try:
y = int(input('请输入数字:'))
except ValueError as e:
print('输入错误!')
raise e
else:
print('没有错误!')
finally:
print('无论是否有错误,都将被执行')
使用raise语句抛出异常
如果某个函数或方法可能会产生异常,但不想在当前函数或方法中处理这个异常,则可以使用raise语句在函数或方法中抛出异常
def test():
a = int(input('请输入数字A:'))
b = int(input('请输入数字B:'))
if a == '':
raise TypeError('类型错误')
if __name__ == '__main__':
try:
test()
except ValueError:
print('类型错误')
用户自定义异常
# 自定义一个超长的异常类型
class LongExceptin(Exception):
def __init__(self, leng):
self.leng = leng
def __str__(self):
print('姓名的长度是' + str(self.leng) + '超过长度了')
def name_Test():
name = input("enter your naem:")
if len(name) > 4:
raise LongExceptin(len(name))
else:
print(name)
if __name__ == '__main__':
name_Test()