Python基础入门(7)- Python异常处理机制

1.初识异常

1.1.什么是异常与异常处理

  • 异常就是错误
  • 异常会导致程序崩溃并停止运行
  • 能监控并捕获异常,将异常部位的程序进行修理使得程序继续正常运行

1.2.异常的语法

Python基础入门(7)- Python异常处理机制

Python基础入门(7)- Python异常处理机制

 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.捕获通用异常

Python基础入门(7)- Python异常处理机制

 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.捕获具体异常

Python基础入门(7)- Python异常处理机制

 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.捕获多个异常

Python基础入门(7)- Python异常处理机制

Python基础入门(7)- Python异常处理机制

 

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中的一个
  • 语法: Python基础入门(7)- Python异常处理机制
    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:将信息以报错的形式抛出

Python基础入门(7)- Python异常处理机制

Python基础入门(7)- Python异常处理机制

 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.自定义异常类

Python基础入门(7)- Python异常处理机制

 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

Python基础入门(7)- Python异常处理机制

Python基础入门(7)- Python异常处理机制

 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中的调试方法

百度一搜一大堆,我给大家分享一下我看的资料,比较老了,但是很全,最新版的Pycharm可以适用里面的操作

https://blog.csdn.net/pansaky/article/details/85165609?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1.opensearchhbase&spm=1001.2101.3001.4242.2

上一篇:学测试的都知道,这三种接口上传文件合集方法,不会可不行


下一篇:7.异常