美文网首页
33.2-异常概念、产生和捕获

33.2-异常概念、产生和捕获

作者: BeautifulSoulpy | 来源:发表于2020-01-03 18:35 被阅读0次

每天早上起床,你都有两个选择,不是选择平凡地度过今天,就是选择在今天创造属于你生命中的奇迹!

总结:

  1. Python 中比较奇怪的是错误被放到异常类中去;
  2. 尽可能的避免错误;尽可能的捕获、处理各种异常;

1. Python异常与错误处理基本概念

错误 Error

逻辑错误:算法写错了,加法写成了减法
笔误:变量名写错了,语法错误
函数或类使用错误,其实这也属于逻辑错误
总之,错误是可以避免的

异常 Exception

本意就是意外情况
这有个前提,没有出现上面说的错误,也就是说程序写的没有问题,但是在某些情况下,会出现一些意外,导致程序无法正常的执行下去。
例如open函数操作一个文件,文件不存在,或者创建一个文件时已经存在了,或者访问一个网络文件,突然断网了,这就是异常,是个意外的情况。
异常不可能避免

错误与异常

在高级编程语言中,一般都有错误和异常的概念,异常是可以捕获的,并被处理的;但是错误是不能被捕获的;

2. 常见的异常与错误种类

Python中不同的异常可以用不同的类型去标识,不同的类对象标识不同的异常,一个异常标识一种错误。

(1) AttributeError:试图访问一个对象没有的属性,比如foo.y,但是foo没有属性y
(2) IOError:输入/输出异常;基本上是无法打开文件
(3) ImportError:无法引入模块或包;基本上是路径问题或名称错误 (4) IndentationError:语法错误(的子类);代码没有正确对齐
(5) IndexError:下标索引超出序列边界
(6) KeyError:试图访问字典里不存在的键
(7) KeyBoardInterrupt:ctrl+c被按下(在cmd命令下)
(8) NameError:使用一个还未被赋予对象的变量
(9) SyntaxError:Python代码非法错误。代码不能编译
(10) TypeError:传入对象类型与要求的不符合
(11) UnboundLocalError:试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,才导致你以为正在访问它
(12) ValueError:传入一个调用者不期望的值,即使值的类型是正确的

3. 处理异常

抛出异常后,整个程序就会被终止,当然理想情况下,我们是希望程序不被终止,而是捕捉到这次异常。

try/except/finally语句

范例:

try:
    尝试运行程序
    出现异常后这段代码就不会运行
except 错误类 as e:
    发生异常运行这部分代码

有多个异常错误时,这种写法就有局限性,我们可以这样来写:

#第一种方法
try:    
    print(1/0)    
    print(name)
except (ZeroDivisionError,NameError) as e:    
    print("错误:{}".format(e))

#第二种方法
try:    
    print(1/0)
    print(name)
except ZeroDivisionError as e:    
    print("错误:{}".format(e))
except NameError as e:    
    print("错误:{}".format(e))
# 错误:division by zero

程序存在多个except异常时,程序最多只有一个会被执行并捕捉,简单的说,最先捕捉的异常会被执行,其他都会被忽略

事先并不知道有多少异常,应该怎么处理了?我们可以用Exception,他是其他非系统异常的基类。或者在except语句块后面不加异常类。

try:    
    print(1/0)    
    print(name)
except Exception as e:    
    print("错误:{}".format(e))

# except 后什么都不写,什么异常都捕获;
try: 
    print(1/0)    
    print(name)
except:    
    print("错误")

finally,其作用是不管有无异常,finally内的语句都会被执行。
finally 中一般放置资源,释放管理工作;

这里读取文件,不管是否出现异常,都会执行关闭文件的操作。
try:
    f = open('test.txt','r')
except:    
    print('erro')
finally:
    f.close()

相关文章

  • 33.2-异常概念、产生和捕获

    每天早上起床,你都有两个选择,不是选择平凡地度过今天,就是选择在今天创造属于你生命中的奇迹! 总结:Python ...

  • Python 面向对象 - 08 异常

    目录一、概念二、捕获异常2.1 简单的捕获异常语法2.2 错误类型捕获2.3 异常捕获完整语法三、异常的传递四、抛...

  • Python 面向对象 8: 异常

    一、内容总览 1.1、异常的概念 1.2、捕获异常 1.3、异常的传递 1.4、抛出异常 二、异常的概念 2.1、...

  • python 异常

    异常 目标 异常的概念 捕获异常 异常的传递 抛出异常 01. 异常的概念 程序在运行时,如果 Python 解释...

  • springboot 异常捕获和处理

    springboot 异常捕获和处理 异常捕获处理

  • python 异常

    目标 异常的概念 捕获异常 异常的传递 抛出异常 01. 异常的概念 程序在运行时,如果 Python 解释器 遇...

  • python中OOP的异常

    目录 异常的概念 捕获异常 异常的传递 抛出异常 01. 异常的概念 程序在运行时,如果 Python 解释器 遇...

  • 异常

    目标 异常的概念 捕获异常 异常的传递 抛出异常 01. 异常的概念 程序在运行时,如果 Python 解释器 遇...

  • Python异常处理

    本节课纲: 异常的概念 捕获异常 异常的传递 抛出raise异常 自定义异常 一、异常的概念 程序在运行时,如果 ...

  • 异常try,catch,finally,throw,throws

    java异常概念 java异常分类 异常的捕获和处理 运行期出现的错误是最难解决的. 观察错误名字和行号最重要! ...

网友评论

      本文标题:33.2-异常概念、产生和捕获

      本文链接:https://www.haomeiwen.com/subject/tutboctx.html