1.初识异常
1.1.什么是异常与异常处理
- 异常就是错误
- 异常会导致程序崩溃并停止运行
- 能监控并捕获异常,将异常部位的程序进行修理使得程序继续正常运行
1.2.异常的语法
1 # coding:utf-8
2
3 def upper(str_data):
4 new_str='None'
5 try:
6 new_str=str_data.upper()
7 except:
8 print('程序出错了')
9 return new_str
10
11 result=upper(123)
12 print(result)
13 '''
14 程序出错了
15 None
16 '''
1.3.捕获通用异常
1 # coding:utf-8
2
3 def upper(str_data):
4 new_str='None'
5 try:
6 new_str=str_data.upper()
7 except Exception as e:
8 print('程序出错了:{}'.format(e))
9 return new_str
10
11 result=upper(123)
12 print(result)
13 '''
14 程序出错了:'int' object has no attribute 'upper'
15 None
16 '''
1.4.捕获具体异常
1 # coding:utf-8
2
3 def test():
4 try:
5 print("try start")
6 1/0
7 print("try finish") #这句代码不会执行,因为1/0已经报错了,直接进入到exception中了
8 except ZeroDivisionError as e:
9 print(e)
10 test()
11 '''
12 try start
13 division by zero
14 '''
1 # coding:utf-8
2
3 def test():
4 try:
5 print("try start")
6 print(name)
7 print("try finish")
8 except ZeroDivisionError as e: #except捕获的异常要与实际发生的异常一致,才能捕获到,不然没有用;捕获的是1/0的报错,实际发生的错误是name变量未定义
9 print(e)
10 test()
11 '''
12 Traceback (most recent call last):
13 File "D:/WorkSpace/Python_Study/test01.py", line 10, in <module>
14 test()
15 File "D:/WorkSpace/Python_Study/test01.py", line 6, in test
16 print(name)
17 NameError: name 'name' is not defined
18 try start
19 '''
1.5.捕获多个异常
2.python内置异常函数
|
异常类型集合 |
|
|
异常名称 |
说明 |
|
Exception |
通用异常类型(基类) |
|
ZeroDivisionError |
不能整除0 |
|
AttributeError |
对象没有这个属性 |
|
IOError |
输入输出操作失败 |
|
IndexError |
没有当前的索引 |
|
KeyError |
没有这个键值(key) |
|
NameError |
没有这个变量(未初始化对象) |
|
SyntaxError |
Python语法错误 |
|
SystemError |
解释器的系统错误 |
|
VauleError |
传入的参数错误 |
3.异常中的finally
finally的功能:
- 无论是否发生异常,一定会执行的代码块
- 在函数中,即便在try或except中进行了return也依然会执行finally语法快
- try语法至少要伴随except或finally中的一个
- 语法:try: <> except: <> finally: <> View Code
1 # coding:utf-8 2 3 def test(): 4 try: 5 return "try" 6 except: 7 return "except" 8 finally: 9 return "finally" 10 11 print(test()) #finally
4.自定义异常
4.1.自定义抛出异常raise
raise:将信息以报错的形式抛出
1 # coding:utf-8
2
3 def test(number):
4 if number==100:
5 raise ValueError("number不能等于100")
6 return number
7 print(test(50)) #50
8 print(test(100))
9 '''
10 Traceback (most recent call last):
11 File "D:/WorkSpace/Python_Study/test01.py", line 8, in <module>
12 print(test(100))
13 File "D:/WorkSpace/Python_Study/test01.py", line 5, in test
14 raise ValueError("number不能等于100")
15 ValueError: number不能等于100
16 '''
1 # coding:utf-8
2
3 # 知识点1:raise主动抛出的异常可以被正常捕获
4 def test(number):
5 if number==100:
6 raise ValueError("number不能等于100")
7 return number
8
9 def test1(number):
10 try:
11 return test(number)
12 except ValueError as e:
13 return e
14
15 print(test1(100)) #number不能等于100
1 # coding:utf-8 2 3 # 知识点2:raise语法后面没有进行异常类型的传递,直接跟字符串,编译器报错,必须得加,如果不知道异常类型,使用基类Exception 4 def test(): 5 raise "报错了" 6 7 print(test()) 8 ''' 9 Traceback (most recent call last): 10 File "D:/WorkSpace/Python_Study/test01.py", line 7, in <module> 11 print(test()) 12 File "D:/WorkSpace/Python_Study/test01.py", line 5, in test 13 raise "报错了" 14 TypeError: exceptions must derive from BaseException 15 '''
4.2.自定义异常类
1 # coding:utf-8
2
3 class NumberLimitError(Exception):
4 def __init__(self,message):
5 self.message = message
6
7 class NameLimitError(Exception):
8 def __init__(self,message):
9 self.message = message
10
11 def test(name):
12 if name=="张三":
13 raise NameLimitError("张三不可以被填写")
14 return name
15
16 def test1(number):
17 if number > 100:
18 raise NumberLimitError("数字不能大于100")
19 return number
20
21 try:
22 test("张三")
23 except NameLimitError as e:
24 print(e)
25 '''
26 张三不可以被填写
27 '''
28
29 try:
30 test1(105)
31 except NumberLimitError as e:
32 print(e)
33 '''
34 数字不能大于100
35 '''
5.断言
5.1.断言的功能---assert
assert断言:用于判断一个表达式,在表达式条件为false时触发异常
- raise是生硬的抛出异常
- assert是先进行判断然后根据结果决定是否抛出
5.2.断言得用法---assert
1 # coding:utf-8
2
3 def test(name):
4 assert name in ["张三","李四"],"{}不在学生列表中".format(name)
5 print("{}在学生列表中".format(name))
6 test("张三") #张三在学生列表中
7 test("王五")
8 '''
9 Traceback (most recent call last):
10 File "D:/WorkSpace/Python_Study/test01.py", line 7, in <module>
11 test("王五")
12 File "D:/WorkSpace/Python_Study/test01.py", line 4, in test
13 assert name in ["张三","李四"],"{}不在学生列表中".format(name)
14 AssertionError: 王五不在学生列表中
15 '''
6.python中的调试方法
百度上面的方法一大堆,这里我就不多赘述了。






