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. idea自定义模版

    点小灯 编辑live模版设置 模版全称 private static final Logger logger = LoggerFactory.getLogger($classname$.class); ...

  2. css 网格线

    白色网格线 background: #58a; background-image: linear-gradient(rgba(255,255,255,.3) 1px, transparent 0), ...

  3. C++ 模板练习1

    //特定的模板友元关系 #include "stdafx.h" #include <iostream> using namespace std; template< ...

  4. FFmpeg命令大全(更新中)

    1.视频抽取音频: ffmpeg -i 3.mp4 -vn -y -acodec copy 3.aacffmpeg -i 3.mp4 -vn -y -acodec copy 3.m4a

  5. 连接mysql的各种方式

    mysql连接操作是客户端进程与mysql数据库实例进程进行通信.从程序设计角度来说,属于进程通信,常用进程通信包括: 管道.Tcp/Ip 套接字.UNIX域套接字. 1.TCP/IP (1)使用最多 ...

  6. ubuntu 18.04 安装 Redis-server

    Redis 安装 Redis是一款内存键值存储,以其灵活性,性能和广泛的语言支持而闻名.本教程将演示如何在Ubuntu 18.04服务器上安装和配置Redis.主要内容包括: 安装 Redis Red ...

  7. 2.3 使用Android Studio 简单设计UI界面

    首先 创建一个新的项目找到app 文件目录下的layout的 activity_main.xml 因为Android Studio 是可视化的,所有操作都可以在图形界面进行. 该res 界面当中  d ...

  8. PAT Advanced 1064 Complete Binary Search Tree (30) [⼆叉查找树BST]

    题目 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following proper ...

  9. 移动端— Touch事件轮播图

    虽然 以前也写过手机端页面 .当时用的jquery moblie 框架.啥也不懂 就知道复制粘贴出效果 不敢改内部样式.现在呢  了解手机端原理 一些基本的概念 视口 缩放 后 .再去想以前写的页面  ...

  10. 29. docker swarm 创建 三个节点 swarm 的集群

    1.使用 vagrant 部署 三台 centos/7 的 环境 ###Vagrantfile # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.req ...