python基础(10异常处理)

python系列文章目录

python基础(01变量&数据类型&运算符)
python基础(02序列共性)
python基础(03列表和元组)
python基础(04字符串&字典)
python基础(05集合set)
python基础(06控制语句)
python基础(07函数)
python基础(08类和对象)
python基础(09闭包&装饰器)


文章目录

  • python系列文章目录
  • 前言
  • 一、引导问题
  • 二、结构
    • 1.try...一个except结构
    • 2.try...多个except结构
    • 3.try...except..else结构
    • 4.try...except..else..finally结构
  • 三.常见异常
  • 四.自定义异常类
  • 总结


前言

本文主要讲python中的异常处理,一次性说清python中异常处理的用法。相对来说比较好理解,如果你从第一篇文章学到了这里,那么恭喜你,python基础,你已经挑战了自己!


一、引导问题

  • python中,引进了很多类用来描述和处理异常的类,叫异常类
  • BaseException 所有异常的父类
  • exception 所有异常的基类
  • IOError:打开不存在的文件
  • IndexError:不存在的索引
  • keyError:字典中,用不存在的key
  • NameError:找不到变量名
  • SyntaxError:代码语法错误
  • 异常也采用对象的方式来处理,处理过程:1、抛出异常 2、捕获异常

二、结构

1.try…一个except结构

代码语法:

  • try:包含可能引发异常的代码 except:用来捕捉和处理发生的异常 如果try没引发异常,跳过- except块继续执行后续代码
  • 如果try发生了异常,跳过try块中的后续代码,跳到相应的except块中处理异常,处理完,继续执行后续代码
  • e:产生的异常原因
try:
   被监控的可能引发异常的语句块
except  BaseException[as e]:
   异常处理语句块

例子1:

try:
   print("step1")
   a=3/0
   print("step2")
except BaseException as e:
   print("step3")
   print(e)
print("后续代码")
-------------------------------
step1、step3、异常信息、后续代码

例子2:

题目:循环输入数字,不是数字抛出异常,处理异常,输入88,结束循环

//简单实现
while True:
   x=int(input("请输入一个数字:"))
   if x==88:
       print("结束循环")
       break

//异常信息实现
while True:
   try:
       x=int(input("请输入一个数字:"))
       if x==88:
           print("88结束循环")
           break
   except BaseException as e:
       print(e)
print("循环结束")

2.try…多个except结构

代码语法:


先子类后父类
try:
   被监控的 可能引发异常的语句块
except Exception1:
   处理Exception1的语句块
except Exception2:
   处理Exception2的语句块
......
except BaseException:
   处理可能遗漏的异常的语句块

例子:


try:
    a=input("请输入一个被除数:")
    b=input("请输入一个除数:")
    c=float(a)/float(b)
    print(c)
except ZeroDivisionError:
    print("异常:不能除以0")
except ValueError:
    print("异常:不能将字符串转化成数字")
except NameError:
    print("异常:变量不存在")
except BaseException as e:
    print(e)


3.try…except…else结构

解释说明:

如果try块中没抛出异常,则执行else块,如果try抛出异常,则执行except块,不执行else

例子:


try:
    a=input("请输入被除数:")
    b=input("请输入除数:")
    c=float(a)/float(b)
except BaseException as e:
    print(e)
else:
    print("计算结果是:",c)

4.try…except…else…finally结构

解释说明:

finally无论是否发生异常,都会被执行,通常用来释放try块中申请的资源

例子:


try:
    a=input("请输入被除数:")
    b=input("请输入除数:")
    c=float(a)/float(b)
except BaseException as e:
    print(e)
else:
    print("计算结果是:",c)
finally:
    print("finally都会执行")
print("程序结束")

三.常见异常

1、SyntaxError:语法错误
 int a=3

2、NameError:尝试访问一个没有申明的变量
print(a)

3、ZeroDivisionError:除数为0错误(零除错误)
 a=3/0

4、ValueError:数值错误
 float("jiajia")  #字符串没法转化浮点数

5、TypeError:类型错误
 123+"abc"

6、AttributeError:访问对象不存在的属性
 a=100
 a.sayhi()

7、IndexError:索引越界异常
 a=[4,5,6]
 a[10]

8、KeyError:字典的关键字不存在
 a={"name":"jiajia"}
 a["abc"]


四.自定义异常类

说明:

  • 程序开发中,有时候也需要自己定义异常类,自定义异常类一般都是运行时异常
  • 通常继承Exception或者其子类即可,命名一般以Error,Exception
  • 自定义异常由raise语句主动抛出

例子:

题目:写一个类 不符合的年龄抛出异常

#方法
class AgeError(Exception):  #继承Exception
    def __init__(self,errorInfo):  #继承这个类的属性
        Exception.__init__(self)
        self.errorInfo=errorInfo
    def __str__(self):
        return "年龄错误"```


#测试代码
if __name__=="__main__":    #如果为true,则模块是作为独立文件运行,可以执行测试代码
    age=int(input("输入一个年龄:"))
    if age<1 or age>150:
        raise AgeError(age)
    else:
        print("正常年龄")
   
   
 #测试结果
 输入一个年龄:200
Traceback (most recent call last):
  File "D:\ody\study\python\code\code2\5.01.py", line 211, in <module>
    raise AgeError(age)
__main__.AgeError: 年龄错误


总结

本文比较好理解,欢迎评论区交流,后续持续更新。

你可能感兴趣的:(python基础,python,开发语言,功能测试,自动化)