异常
- 当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"
缩进异常
全选 --> ctrl+alt+i
异常捕获的完整格式
try:
"""
代码片段1
"""
except AttributeError as e:
print("捕获到AttributeError", e, e.message)
except IOError as e:
print("捕获到IOError", e, e.message)
else:
"""
如果excepy没有捕获到错误就执行else里的代码
"""
finally:
"""
不管有没有错误都执行这里的代码
"""
异常捕获案例
# -*- coding:utf-8 -*-
try:
# 错误1
list1 = [1, 2, 3]
print(list1[6])
# 错误2
import abcde
except ImportError as e:
print("引入错误,通常是引入的模块不存在")
print(e.message)
except IndexError as e:
print("索引错误,通常是索引越界")
print(e.message)
except BaseException as e:
print("所有错误异常的基类,可以捕获所有异常")
print(e.message)
else:
print('如果没有异常,走这里')
finally:
print("不管怎么样我都要执行")
常用的异常捕获类型(面试题)
- ImportError 导入错误
- IndexError 索引错误
- NameError 尝试访问一个没有申明的变量
- ZeroDivisionError 除数为0
- SyntaxError 语法错误
- IndexError 索引超出序列范围
- KeyError 请求一个不存在的字典关键字
- IOError 输入输出错误(比如你要读的文件不存在)
- AttributeError 尝试访问未知的对象属性
- ValueError 传给函数的参数类型不正确,比如给int()函数传入字符串形
其它异常类型碰见再手动添加
抛出异常
raise NameError('HiThere')
自定义异常
#!/usr/bin/env python
# -*- coding:utf-8 -*-
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
try:
raise MyError(2*2)
except MyError as e:
print('My exception occurred, value:', e.value)