python常见的异常类型?

异常有很多种类型,常见的由语法错误(SyntaxError)、类型错误(TypeError)、名字错误(NameError)等等,但我们要知道的是异常本身就是一个类的实例,所有的异常都继承于这个BaseException,在这个父类上又下分了下面四大类:

  1. SystemExit   python退出异常
  2. KeyboardInterrupt   键盘打断(ctrl+c)
  3. GeneratorExit    生成器退出
  4. Exception   普通异常

我们常见的python异常基本上都属于普通异常。

异常处理的机制

  在Python当中,若一个程序在运行的时候出错,Python解释器会自动的在出错的地方生成一个异常对象,而后Python解释器会自动的在出错地方的附近寻找有没有对这个异常对象处理的代码,所谓异常处理代码就是try……except语句,如果没有,Python解释器会自动的将这个异常对象抛给其调用函数,就这样层层抛出,如果在main当中也没有对这个异常对象处理的代码,Python解释器最后会做一个简单粗暴的处理,将整个程序给终止掉,并将错误的信息在显示屏上输出。

捕获异常,防止程序因报错而中断

通常都是使用try......except......来处理异常,将可能出错的代码放在try里,用except来捕获可能的错误类型,从而自定义提示报错语句。

try:
print ('start')
a = 1/0
print ('mid')
except Exception as a:
print (a) print ('end')
start
division by zero
end

上面简单的例子可以看出,放在try的语句,一旦发现某一句有异常,后面的语句就不会再执行,然后会跳到except中来捕获这是一个什么异常类型。通常在我们不知道会出现什么异常类型时,我们就使用普通异常Except这个大范围,最后跳出except,继续执行后面的代码。

要注意的是,except后面可以只加‘:’,但这样就不会捕获出是什么异常。也可以加上具体的异常类型来捕获,更可以加上多种异常。

try:
print ('start')
a = 1/0
print ('mid')
except NameError as a:
print ("这个异常类型是:a")
except Exception as a:
print ("这个异常类型是:",a) print ('end')
start
这个异常类型是: division by zero
end

加多个异常也可以用一个except,后面用括号包含多个异常。

except (NameError,TypeError,Exception) as a:

在捕获异常时,它会从上到下依次对比异常类型,找到之后就不会在往下找了。我们知道try里的语句出现错误时,会到except下捕获,但要是没有错误呢?事实上,在except后还能加上一个else,它会在try没有错误时来执行里面的代码。而在else后面,我们还能再加上finally,它是在无论try里面的语句有没有报错都会去执行。


try:
print ('start')
a = 2
print ('mid')
except NameError as a:
print ("这个异常类型是:a")
except Exception as a:
print ("这个异常类型是:",a)
else:
print ("try内语句没有问题")
finally:
print ("无论try内语句怎么样,我都会出现") print ('end')
start
mid
try内语句没有问题
无论try内语句怎么样,我都会出现
end

自定义异常及主动抛出异常

我们可以自己定义一个异常类型,但这个异常类型必须继承于Exception。即使在没有报错的情况下,我们也可以自己抛出一个异常,格式为:raise 异常类型 。

class xiaxie(Exception):#自定义一个异常类型
pass try:
print ('start')
a = 2
print ('mid')
raise xiaxie
except NameError as a:
print ("这个异常类型是NameError")
except xiaxie as a:
print ("这个是自定义的异常类型")
except Exception as a:
print ("这个异常类型属于:",a)
else:
print ("try内语句没有问题")
print ('end')
start
mid
这个是自定义的异常类型
end

断言

断言是用来检查非法情况而不是错误情况的,用来帮开发者快速定位问题的位置。异常处理用于对程序发生异常情况的处理,增强程序的健壮性和容错性。格式为:assert condition [,expression ]。一般情况下如assert (),这时会raise一个AssertionError出来,因为这时的condition为False。

应用场景:开发者所写的代码量大,但在编译时报出错误,又不能具体知道是哪出错了,这时可用断言来一步步检测代码。

python基础——异常处理及断言的更多相关文章

  1. python基础-异常处理

    一.错误和异常 程序中难免出现错误,而错误分成两种 1.1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def te ...

  2. python基础 — 异常处理

    什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行. 一般情况下,在Python无法正常处理程序时就会发生一个异常. 异常是Python对象,表示一个错误. 当Pyth ...

  3. python基础——异常处理、递归

    异常处理 while True: try: num1 = int(input('num1:')) num2 = int(input('num2:')) result = num1 + num2 exc ...

  4. Python基础_文件的的处理及异常处理

    今天主要讲讲文件读写及异常处理. 一.文件操作 1.1 文件的创建及读 打开文件 open 函数  open(file,[option]) file 是要打开的文件 option是可选择的参数文件的打 ...

  5. Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础

    本节内容: 1.     面向对象高级语法部分 1.1   静态方法.类方法.属性方法 1.2   类的特殊方法 1.3   反射 2.     异常处理 3.     Socket开发基础 1.   ...

  6. Python 基础之 异常处理

    python 基础之异常处理 说到异常处理,就得先问一下,什么是异常处理?  先来看一下,什么是异常? 异常就是:程序运行时发出的错误的信号. 异常的种类先来看一下: 一.常见的异常 Attribut ...

  7. python异常处理和断言

    http://blog.csdn.net/pipisorry/article/details/21841883 关于异常处理有必要么的讨论 最重要的问题是你在开发过程中隐藏了bug,如果当时你没加这个 ...

  8. python异常处理与断言以及日志模块

    python异常处理与断言 目录: 1.异常处理 2.断言(assert) 3.日志模块(logging) 4.修改之前的车票信息查询,把日志模块.异常处理加进去 1.异常处理 代码如下: 语法: t ...

  9. (69)Python异常处理与断言

    http://blog.csdn.net/pipisorry/article/details/21841883 断言 断言是一句必须等价于布尔真的判定;此外,发生异常也意味着表达式为假.这些工作类似于 ...

随机推荐

  1. JS的BOM对象

    BOM对象 (一)简介:BOM对象,即浏览器对象模型: 通过javascript的对象,操作和浏览器相关的操作 B:  Browser,浏览器 O: Object,对象 M: Model,模型 (1) ...

  2. C#类、对象、方法和属性详解

    C#类.对象.方法和属性详解 一.相关概念: 1.对象:现实世界中的实体(世间万物皆对象) 2.类:具有相似属性和方法的对象的集合 3.面向对象程序设计的特点:封装 继承 多态 4.对象的三要素:属性 ...

  3. 杂点-shell

    使用while循环读取文件 cat file.txt |while read line do echo $line done 或者: while read line do echo $line don ...

  4. JS-语句四

    For 循环: for 循环是创建循环时常会用到的工具. 下面是 for 循环的语法: ; 语句 ; 语句 ) { 被执行的代码 } 其中语句1是初始值:语句2是.条件判断:语句3是状态改变:被执行的 ...

  5. python的debug神器PySnooper

    同事给我推荐了这个调试神器,一直没工夫看,今天看了下. 原文链接: 史上最方便的Python Debug工具|腾讯技术说 体验了下,感觉最好的用法:1.优先逐行调试:2.一些复杂状态处理或者偶现的bu ...

  6. CSU 1425 NUDT校赛 I题 Prime Summation

    这个题本来有希望在比赛里面出了的 当时也想着用递推 因为后面的数明显是由前面的推过来的 但是在计算的时候 因为判重的问题 ...很无语.我打算用一个tot[i]来存i的总种树,tot[i]+=tot[ ...

  7. win10使用笔记本自带显卡GUP安装CUDA,版本问题

    1.GPU算力问题 查询:win+r, GPU:GeForce GTX 850m,算力5.0,还可以跑得起来深度项目 2.我们需要查看NVIDIA驱动版本,才能安装合适的CUDA版本. 在C:\Pro ...

  8. 将QT窗口嵌入到WinForm窗口

    要想 windows下抓取Qt进程主界面,并嵌入到自己的程序中显示,需要首先设置qt窗口的windowTitle属性,然后就可以通过 windows api 中的 FindWindow 函数查找到窗口 ...

  9. atan2&sin

    //弧度转化角度:弧度*180/PI //角度转化弧度:角度*PI/180 #include <math.h> #include <stdio.h> const double ...

  10. mysql,apache,php的关系

    首先要明白动态网站与静态网站 所谓的动态网页,是指跟静态网页相对的一种网页编程技术.静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码.而动态网页则不然 ...