06-3 | 异常处理,类异常

逸兴
逸兴
逸兴
57
文章
25
评论
2020-05-1511:01:141 1398字阅读4分39秒
摘要

python异常处理,类异常,异常与错误的区别。异常可以被捕获被处理,而错误是不能被捕获的。

异常定义:

异常就是python 运行时的意料之外的情况,不同于 错误。

错误:可以理解为 算法逻辑写错了,变量名写错了,语法错误等,这些是人为造成的,可以避免的。(python代码会先编译成中间字节码,然后在运行,而语法错误是在编译的过程中发现的。)

异常:意外情况,比如程序访问一个网络文件,而断网了。打开一个文件,但是文件不存在。

异常可以被捕获被处理,而错误是不能被捕获的。

一个健壮的程序,尽可能的避免错误,尽可能的捕获异常,处理各种异常。

异常处理:

try:... expect: ....

06-3 | 异常处理,类异常
06-3 | 异常处理,类异常

捕捉指定类型的异常:

上面的expect: 代表什么异常都捕获,此外还可以指定要捕获的异常。

06-3 | 异常处理,类异常

如果捕获的异常类型不正确是无法捕获的,如下:

06-3 | 异常处理,类异常

常见异常:

注意:Python所有的错误都是从BaseException类派生的,而 Exception 是BaseException 的子类 包含大部分异常 是 非系统退出的异常的基类。如SystemExit 则不在其中。

  • AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
  • IOError 输入/输出异常;基本上是无法打开文件
  • ImportError 无法引入模块或包;基本上是路径问题或名称错误
  • IndentationError 语法错误(的子类) ;代码没有正确对齐
    • 这种语法错误或者强类型错误,程序无法捕捉,因为程序在加载到解释器时,解释器会对代码进行结构扫面,这时候扫描到语法错误,会导致程序崩溃。
  • IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
  • KeyError 试图访问字典里不存在的键
  • KeyboardInterrupt Ctrl+C被按下
    • 这个异常被抓取后,程序就不会因Ctrl + C 退出
    • 同样的还有EOFError , 程序不会因Ctrl + d 退出
    • 这两种错误可以放在一起抓取:
      • except (EOFError,KeyboardInterrupt) as e:
      • python3 中多个异常用括号,2 中不用括号,直接逗号写
  • NameError 使用一个还未被赋予对象的变量
  • SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
  • TypeError 传入对象类型与要求的不符合
  • UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
  • ValueError 传入一个调用者不期望的值,即使值的类型是正确的

异常匹配过程中,可以多次匹配 expect,如下: 自上而下的匹配。

06-3 | 异常处理,类异常

raise 手动创建一个新的异常,抛出

raise后面如果是一个类本身的话,实际会调用 类的实例化对象, 也就是类()

as子句,将异常信息赋给标识符

06-3 | 异常处理,类异常

自定义异常:

raise抛出的异常,除了python已经定义好的,还可以自定义异常。

这里的自定义异常可以是一个字符,一个列表,集合等,还可以是用一个类,一个实例,如下:

06-3 | 异常处理,类异常

raise可以收到抛出异常,但是抛出的异常必须由对应的异常类型才能接收, 在这里自定义异常 MyException是继承的Exception类, 所以Exception可以接收。

finally: 最后处理

一般在最后做一些资源释放的操作

06-3 | 异常处理,类异常

不管是什么异常,如果异常最后没有被处理掉, 就由finally接收,一般在这里做些资源释放的操作。

else 子句

06-3 | 异常处理,类异常

当没有异常时,try块中的 else 子句才会被执行。

异常总结:

06-3 | 异常处理,类异常
06-3 | 异常处理,类异常




https://www.hugbg.com/archives/2533.html
逸兴
  • 本文由 发表于 2020-05-1511:01:14
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
01-1 数据类型 基础语法

01-1 数据类型

第一章 数据类型 使用type() 函数可以查看数据类型 1.1 字符串 str 字符串是使用单引号或双引号括起来的任意文本。 比如'abc', '123'等 字符串类型 字符串类型用str表示 st...
09-5 | asyncio基本使用 并发编程

09-5 | asyncio基本使用

第一节 关于asyncio asyncio 在3.4 版本中加入到标准库, asyncio基于selector实现, 看似库, 其实是个框架, 包含异步IO, 事件循环, 协程, 任务等内容。 通过a...
09-4 | 全局解释器锁 & 多进程 & 池 并发编程

09-4 | 全局解释器锁 & 多进程 & 池

GIL CPython 在解释器进程级别有一把锁,叫做GIL,即全局解释器锁。 GIL 保证CPython进程中,只有一个线程执行字节码。甚至是在多核CPU的情况下,也只允许同时只能 有一个CPU核心...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:1   其中:访客  1   博主  0
    • ttt ttt 0

      月有盈亏花有开谢,想人生最苦离别。 —普天乐·咏世