本文目录:

一、异常是什么

二、常见异常

三、异常处理

四、不太常用语法

五、主动判处异常

六、断言

七、使用场景

八、自定义异常类型

一、异常是什么

什么是异常?

  1. 异常是错误发生前的一种信号
  2. 如果没有人来处理这个信号 程序就会中断执行并抛出错误信息

异常的分类:

1.语法检查异常 这种异常是最低级异常 绝对不应该犯

  1. 也非常好避免
  2. 如果是编译器 会自动提示
  3. 如果是文本编辑器 在你运行代码前 解释器会检查语法

2.运行时异常(逻辑异常)

  1. 这种异常只有在代码被执行时才能发现
  2. 我们要处理的重点就是运行时异常

  3. 特点:在没有运行代码前 是无法发现的
  4. 如果运行时异常已经发生并且没有正确处理他 就抛出错误信息
  5. 并且中断程序的执行 这是要我们学习异常解决的问题

异常的组成

  1. 1.追踪信息 (具体发生异常的位置 以及函数的调用顺序)
  2. 2.异常的类型 (错误的类型)
  3. 3.异常的消息 (详细的错误信息)
  1. """
  2. 我们之所以学习异常处理
  3. 为的是让我们的程序更加稳定 (健壮性) 不容易崩溃
  4. """
  5. name =
  6. def func():
  7. import xxaaa
  8.  
  9. def func1():
  10. func()
  11.  
  12. func1()

二、常见异常

  1. """
  2. 常见的发生原因:
  3. NameError 找不到这个名字 要么变量 要么函数
  4. ValueError 在调用一个函数时给的的值不正确
  5. TypeError 类型错误 例如字符串与数字加减乘除 调用一个不能被调用的类型
  6. ZeroDivisionError 除数不能为0
  7. KeyError 没有这个key
  8. IndexError 索引不存在
  9. StopIteration 没有更多的值可以迭代
  10. FileNotFoundError 文件不存在
  11. io.UnsupportedOperation 文件的操作不支持
  12. AttributeError 没有这个属性
  13. KeyboardInterrupt 程序被强行终止 ctrl+c
  14. """
  1. # print(helloword)
  2. # age = int(input("请输入年龄:"))
  3. # li = []
  4. # li()
  5.  
  6. # "abc" + 123
  7.  
  8. # 5 / 0
  9. # with open(r"D:\上海python全栈4期\day31\异常处理\1今日内容","rt") as f:
  10. # pass
  11. # print(f)
  12. # f.read()
  13.  
  14. # dic = {"age":20}
  15. # dic["sex"]
  16.  
  17. # li = [1,2,3]
  18. # print(li[-100])
  19.  
  20. # def my_iter():
  21. # yield "a"
  22. # yield "b"
  23. # i = my_iter()
  24. # print(next(i))
  25. # print(next(i))
  26. # print(next(i))
  27.  
  28. # f = open("test","rt")
  29. # f.write("123")
  30.  
  31. # li = []
  32. # li.abc
  33.  
  34. # import time
  35.  
  36. while True:
  37. pass

三、异常处理

  1. """
  2. 要处理异常
  3. 要学的就是一个新的语法
  4.  
  5. 今后使用最多的写法:
  6. try:
  7. 这里放可能出现异常的代码
  8. except: 异常的类型:
  9. 当异常发生并且异常类型匹配时
  10. 执行except中的代码
  11. 注意:一旦try中有代码抛出了异常 后面的代码全都不执行
  12.  
  13. 练习: 捕获某种类型的异常 捕获任意类异常 感受一下执行顺序
  14. """
  1. #基本语法:
  2. # print("staring.....")
  3. # try:
  4. # name
  5. # except NameError:
  6. # print("名字找不到!")
  7. # print("end.......")
  8.  
  9. # 多种异常类型处理
  10. # print("staring.....")
  11. # try:
  12. # name
  13. # [][-1]
  14. # pass
  15. # except NameError:
  16. # print("名字找不到!")
  17. # except IndexError:
  18. # print("索引超出范围")
  19. # print("end.......")
  20.  
  21. # 当代码可能出现多种异常时的写法
  22. # print("staring.....")
  23. # try:
  24. # # name
  25. # # [][-1]
  26. # 1/0
  27. # pass
  28. # except NameError:
  29. # print("名字找不到!")
  30. # except IndexError:
  31. # print("索引超出范围")
  32. # except ZeroDivisionError:
  33. # print("除数不能为0")
  34. # print("end.......")
  35.  
  36. # 当代码可能出现多种异常时的写法2
  37. # print("staring.....")
  38. # try:
  39. # {}["aaa"]
  40. # # name
  41. # # [][-1]
  42. # 1/0
  43. # except (NameError,IndexError,ZeroDivisionError):
  44. # print("可能名字找不到! 可能所以超出范围 可能除数为0")
  45. # print("end.......")
  46.  
  47. # 上面两种写法 都可以处理多种异常 但是 异常类型太多了 不可能全写完
  48. # 万能异常类型 Exception 或BaseException 基于OOP的继承和多态
  49. print("staring.....")
  50. try:
  51. # {}["aaa"]
  52. # name
  53. # [][-1]
  54. 1/0
  55. except Exception:
  56. print("可能名字找不到! 可能所以超出范围 可能除数为0")
  57. print("end.......")

四、不太常用的语法

  1. """
  2. 不太常用的
  3. 语法1
  4. try:
  5. except:
  6. else: try中没有发生异常时执行
  7.  
  8. 语法2
  9. try :
  10. except :
  11. finally : 无论是否发生异常 都会执行finally 可以用来回收系统资源!
  12. """
  13. # print("start...")
  14. # try:
  15. # # 1/0
  16. # [][1]
  17. # pass
  18. # except ZeroDivisionError:
  19. # print("除数异常")
  20. # except NameError:
  21. # print("名字异常")
  22. # else:
  23. # print("else会在 try中没有异常时执行")
  24. # print("end...")
  25.  
  26. # finally
  27. # print("start...")
  28. # try:
  29. # # 1/0
  30. # # [][1]
  31. # pass
  32. # except ZeroDivisionError:
  33. # print("除数异常")
  34. # except IndexError:
  35. # print("索引异常")
  36. # else:
  37. # print("else会在 try中没有异常时执行")
  38. # finally:
  39. # print("finally 无论异常是否发生 都会执行!")
  40. # print("end...")
  41.  
  42. # 使用finally来回收资源
  43. try:
  44. f = open(r"D:\上海python全栈4期\day31\异常处理\1今日内容","rt",encoding="utf-8")
  45. f.read()
  46. # f.write("123")
  47. except Exception:
  48. print("发生异常了")
  49. finally:
  50. print("关闭文件!")
  51. f.close()
  52.  
  53. print(f.closed)

五、主动抛出异常

  1. """
  2. 当程序中有一些限制 然而用户没有遵守 我们可以主动抛出异常
  3. 语法:
  4. raise 异常类型(异常的详细信息)
  5. 类型必须是BaseException的子类
  6. """
  1. # raise NameError("这就是名字不存在异常!")
  2.  
  3. age = input("请输入整型的年龄:")
  4. if not age.isdigit():
  5. raise TypeError("你输入的不是整型!")
  6. age = int(age)
  7. print("十年后你%s岁" % (age + 10))

六、断言

  1. """
  2. 断言 可以理解断定 就是很清楚 很明确
  3. 什么时候需要断定?
  4. 下面的代码必须依赖上面代码的正确数据
  5. 语法: assert 结果为Bool的表达式
  6. 如果值为True 则继续往下执行
  7. 为False 抛出一个 AssertionError 表示断言失败
  8. 没有assert 也可以使用if来玩 assert 仅仅是简化了代码
  9.  
  10. """
  1.  
  2. # 第一部分代码 负责产生一个列表
  3. li = []
  4. # li.append(1)
  5. # li.append(2)
  6. # 这里一定要确保数据是有效的
  7. # if len(li) < 1:
  8. # raise ValueError("列表中没有数据!")
  9. assert len(li) > 0
  10. # 需要使用列表中的数据来完成任务 如果没有数据无法完成
  11. print(li[0])
  12. print(li[0])
  13. print(li[0])
  14. print(li[0])

七、使用场景

  1. try:
  2. print("业务逻辑分层复杂 写了好几百行!")
  3. except Exception:
  4. print("可能是文件不存在!")
  5. try:
  6. print("业务逻辑分层复杂 写了好几百行!")
  7. except Exception:
  8. print("类型不匹配!")
  9. print("业务逻辑分层复杂 写了好几百行!")
  10. print("业务逻辑分层复杂 写了好几百行!")
  11. print("业务逻辑分层复杂 写了好几百行!")
  12. print("业务逻辑分层复杂 写了好几百行!")
  13. print("业务逻辑分层复杂 写了好几百行!")
  14. print("业务逻辑分层复杂 写了好几百行!")
  15. print("业务逻辑分层复杂 写了好几百行!")
  16. print("业务逻辑分层复杂 写了好几百行!")
  17. print("业务逻辑分层复杂 写了好几百行!")
  18. print("业务逻辑分层复杂 写了好几百行!")
  19. print("业务逻辑分层复杂 写了好几百行!")
  20. print("业务逻辑分层复杂 写了好几百行!")
  21. except Exception:
  22. print("有点问题!")
  23.  
  24. # 不应该滥用try except
  25. # 什么时候用? 如果你知道为什么出错 应该把代码修改正确 而不是加上try except
  26. # 你不清楚为什么会发生异常! 这时候用try
  27.  
  28. try:
  29. f = open("xxxx","rt")
  30. f.read()
  31. except Exception:
  32. print("文件不存在!")

八、自定义异常

  1. """
  2. 当系统提供的这些异常类型 和你要描述的错误不匹配时 就需要自定义异常类型
  3. 写法:
  4. class 自定义异常类型名称(BaseException):
  5. 总结一下:之所以自定义异常类型 是为了更具体描述你的错误 让使用者一眼就看出了
  6.  
  7. 关键点:1.如何自定义异常类型
  8. 2.在except中 使用as 来获取异常对象
  9.  
  10. """
  1. # 你随便输入一句话 看我喜不喜欢 不喜欢我就抛出异常
  2. # 自定义异常类
  3. class UnlikeError(BaseException):
  4. def __init__(self,msg,text):
  5. self.msg = msg
  6. self.text = text
  7. # 函数中可能抛出异常
  8. def hello():
  9. text = input("输入一段话:")
  10. if text == "你真帅":
  11. print("你说得对!")
  12. else:
  13. raise UnlikeError("你再看看...","另一个参数")
  14. # 捕获异常
  15. try:
  16. hello()
  17. # 获取异常对象
  18. except UnlikeError as e:
  19. print(e.text)

python异常:常见异常、处理、断言、自定义异常的更多相关文章

  1. Python语言常见异常错误类型

    在运行或编写一个程序时常会遇到错误异常,这时python会给你一个错误提示类名,告诉出现了什么样的问题(Python是面向对象语言,所以程序抛出的异常也是类).能很好的理解这些错误提示类名所代表的意思 ...

  2. Python开发 常见异常和解决办法

    1.sqlalchemy创建外键关系报错property of that name exists on mapper SQLAlchemy是Python编程语言下的一款开源软件,提供了SQL工具包及对 ...

  3. Python异常类型及处理、自定义异常类型、断言

    异常的概念.识别报错信息 异常处理 断言的基本使用 异常类型(异常就是报错) 常见异常 NameError:名称错误 SyntaxError:语法错误 TypeError:类型错误 错误回溯 查看报错 ...

  4. python异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-3

    异常捕获 异常:程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表现出来 影响:整个程序无法再正常运行 异常的结构 异常的类型 NameError 异常的信息 ...

  5. Python常见异常及常用单词翻译

    Python常见异常及常用单词意思 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常:基本上是无法打开文件 ImportE ...

  6. Python中常见的异常总结

    Python中常见的异常总结 当Python检测到一个错误时,解释器就会指出当前流已经无法继续执行下去,这时候就出现了异常. 一.异常错误    a.语法错误     错误一:     if     ...

  7. python中常见的一些错误异常类型

    python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的 ...

  8. python错误和异常

    一:语法错误syntax errors        熟悉语法! 二:异常 ①打印错误信息时,异常的类型作为异常的内置名显示,并以调用栈的形式显示具体信息    ②常见的异常:             ...

  9. Python错误和异常 学习笔记

    错误和异常概念 错误:     1.语法错误:代码不符合解释器或者编译器语法     2.逻辑错误:不完整或者不合法输入或者计算出现问题 异常:执行过程中出现万体导致程序无法执行     1.程序遇到 ...

随机推荐

  1. flask(2.0)

    目录 一. Flask基础(一) 1.Flask启动 2.路由 3.Response 4.Request 5.Jinja2 6.session 二.Flask基础(二) 1.路由配置 (1)metho ...

  2. clrscr()及gotoxy()函数

    1.clrscr() 作用:清屏,跟 cmd 中的清屏作用一样 注意:只有在 Trubo C 中能用,需要包含头文件:conio.h 替代:system("cls"); 需要头文件 ...

  3. 云计算openstack核心组件--glance-镜像服务(6)

    glance做什么 OpenStack 由 Glance 提供 Image 服务 获取镜像位置 https://docs.openstack.org/image-guide/obtain-images ...

  4. 【C/C++开发】C语言 DLL(动态链接库)中申请动态内存释放的问题

    参考:首先,声明一点,凡是使用malloc之类命令动态申请的内存,必须进行释放操作,否则就会发生内存泄漏问题. DLL中申请的内存释放,如果没有做过,很可能会认为是直接在调用程序中释放就可以了,其实不 ...

  5. python类学习

    创建关于汽车的类 class Cars(): def __init__(self, brand, country): self.brand = brand self.country = country ...

  6. 20.采集项目流程篇之清洗数据绑定到hive表中

    先启动hive 在mydb2这个数据库中创建表: create external table mydb2.access(ip string,day string,url string,upflow s ...

  7. PAT 甲级真题题解(121-155)

    1121 Damn Single 模拟 // 1121 Damn Single #include <map> #include <vector> #include <cs ...

  8. The import javax.websocket cannot be resolved的解决问题

    在eclipse中导入项目的时候出现了这个问题,废了我半天劲,才搞明白,把问题记录下来,方便大家以后遇到这问题好处理.提供参考. 出现的问题截图: 因为我用的是tomcat8, 大体步骤:项目上点右键 ...

  9. POJ - 3249 Test for Job (在DAG图利用拓扑排序中求最长路)

    (点击此处查看原题) 题意 给出一个有n个结点,m条边的DAG图,每个点都有权值,每条路径(注意不是边)的权值为其经过的结点的权值之和,每条路径总是从入度为0的点开始,直至出度为0的点,问所有路径中权 ...

  10. linux常用国内的免费源及其各别的配置方法.阿里源,epel源,搜狐网易等等..

    国内的一些开源的平台收集的源,确实给我们提供了很多便利,所以我就稍微收集整理了一些常用的源和网址,我也不确定能用到什么时候!欢迎评论区留言! 搜狐开源镜像站 http://mirrors.sohu.c ...