1. 什么是异常
1.1 异常
1.2 异常原因
AttributeError 、IOError 、ImportError 、IndexError、
SyntaxError、TypeError、ValueError、KeyError、NameError
常见错误:
IndentationError: 缩进错误
KeyboardInterrupt: Ctrl+C被按下
UnboundLocalError : 有同名的全局变量
异常展示:
print(a) #NameError: name 'a' is not defined
print(10/0) #ZeroDivisionError: division by zero
d = {
'name':10}
print(d['age']) #KeyError: 'age'
with open('hello.py') as f:
pass #FileNotFoundError:
a=b=18
if a>b:
print('wrong')
else:
print('right') #IndentationError: expected an indented block
2. 异常处理机制
try:
a=1
print(b)
except NameError as e:
print('0-name error')
except KeyError as e:
print('4-key error')
except Exception as e:
print('1-exception')
else:
print('2-no error')
finally:
print('3-run code')
# 0-name error
# 3-run code
3. 触发异常
- Python 允许程序自行引发异常,自行引发异常使用 raise 语句来完成。
raise语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,
args 是自已提供的异常参数。
raise [Exception [, args [, traceback]]]
4. 用户自定义异常
4.1 自定义异常的使用
- 用户自定义异常都应该继承 Exception 基类或 Exception 的子类,在自定义异常类时基本不需要书写更多的代码,只要指定自定义异常类的父类即可。
演示:
class AgeError(ValueError):
pass
age = int(input('age:'))
if 0<age<150:
print(age)
else:
#抛出异常
raise AgeError('年龄必须在0-150之间!!')
结果:
Traceback (most recent call last):
File "E:/AAAaaa---python day/Python8/异常.py", line 55, in <module>
raise AgeError('年龄必须在0-150之间!!')
__main__.AgeError: 年龄必须在0-150之间!!
4.2 python异常使用规范
不要过度使用异常
不要使用过于庞大的 try 块
不要忽略捕获到的异常