一. 简介

  在编程过程中为了增加友好性,在程序出现Bug时一般不会直接将错误信息展示给用户,而是提供一个友好的输出提示。

二. 使用

1. 异常基础

常用结构:

  1. try:
  2. pass
  3. except Exception,ex:
  4. pass

其他结构:

  1. try:
  2. # 主代码块
  3. pass
  4. except KeyError,e:
  5. # 异常时,执行该块
  6. pass
  7. else:
  8. # 主代码块执行完,执行该块
  9. pass
  10. finally:
  11. # 无论异常与否,最终执行该块
  12. pass

2. 异常种类

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

3. 多个异常捕获

  1. try:
  2. pass
  3. except IndexError,e:
  4. pass
  5. except KeyError,e:
  6. pass
  7. except ValueError,e:
  8. pass 

4. 万能异常捕获

  1. try:
  2. pass
  3. except Exception,e:
  4. pass

疑问:既然有了万能异常,那么我们还需要单异常捕获或者多异常捕获吗?

自问自答:很多场景我们需要明确异常种类,根据异常种类能快速定位产生异常的原因。如果所有异常都用万能异常捕获,虽然避免了程序抛出难看的异常,但是也无法帮助我们解决问题,常用思路是对于特殊的异常我们单独做异常报错,其他可以忽略的异常用万能异常处理。

  1. s1 = 'hello'
  2. try:
  3. int(s1)
  4. except KeyError,e:
  5. print('键错误')
  6. except IndexError,e:
  7. print('索引错误')
  8. except Exception, e:
  9. print('错误')

5. 自定义异常

  1. class MyException(Exception):
  2.  
  3. def __init__(self, msg):
  4. self.message = msg
  5.  
  6. def __str__(self):
  7. return self.message
  8.  
  9. try:
  10. raise MyException('我的异常')
  11. except MyException,e:
  12. print(e)

6. 主动触发异常

  1. try:
  2. raise Exception('错误了。。。')
  3. except Exception,e:
  4. print(e)

7. 断言

  1. # 条件成立不报错,反之报错
  2. # assert 条件
  3.  
  4. assert 1 == 1 # 条件成立,则继续执行下面的代码
  5.  
  6. assert 1 == 2 # 条件不成立,则报错

 

Python3异常处理的更多相关文章

  1. python3 异常处理

    什么是异常 Python用异常对象(exception object)来表示异常情况.遇到错误会引发异常,如果异常对象未被处理或者捕捉,程序就会用回溯(traceback)终止执行. Raise语句: ...

  2. python3异常处理 try

    一. 简介 在编程过程中为了增加友好性,在程序出现Bug时一般不会直接将错误信息展示给用户,而是提供一个友好的输出提示. 二. 使用 1.异常基础 常用结构: try: pass except Exc ...

  3. win10上使用php与python实现与arduino串口通信

    注意: php 需要php7,安装及开启php_dio.dll com口按照实际的进行设置,如果不知道可以打开arduino编辑器进行查看 可以与用户实现命令行交互,但是效率过慢,不清楚如何优化,使用 ...

  4. Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)

    urllib是python的一个获取url(Uniform Resource Locators,统一资源定址器)了,我们可以利用它来抓取远程的数据进行保存哦,下面整理了一些关于urllib使用中的一些 ...

  5. 【Python3之异常处理】

    一.错误和异常 1.错误 代码运行前的语法或者逻辑错误 语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) def test: ^ SyntaxError: inva ...

  6. Python3中urllib详细使用方法(header,代理,超时,认证,异常处理) 转

    urllib是python的一个获取url(Uniform Resource Locators,统一资源定址器)了,我们可以利用它来抓取远程的数据进行保存哦,下面整理了一些关于urllib使用中的一些 ...

  7. 【转】Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)

      urllib是python的一个获取url(Uniform Resource Locators,统一资源定址器)了,我们可以利用它来抓取远程的数据进行保存哦,下面整理了一些关于urllib使用中的 ...

  8. python3.4学习笔记(二) 类型判断,异常处理,终止程序

    python3.4学习笔记(二) 类型判断,异常处理,终止程序,实例代码: #idle中按F5可以运行代码 #引入外部模块 import xxx #random模块,randint(开始数,结束数) ...

  9. Python3基础(6)面向对象编程、异常处理

    ---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...

随机推荐

  1. javascipt——原型

    1.原型存在的意义 JS不是面向对象的语言,没有类的概念,但是提供了构造器函数,其也可以创建一个对象.构造器函数如下: function people(name, age, sex) { this.n ...

  2. Mycat实战之数据迁移(oracle -- mysql)

    1.案例场景: Mycat 后面接一个 Oracle 实例与一个 MySQL 实例,假设用户表,订单表,转账记录表, Oracle 字符集为 GBK 的,MySQL 字符集则要求 UTF8的 完成用户 ...

  3. uboot启动正常,加载内核kernel启…

    先说现象吧:uboot能够正常启动,不过在kernel启动时却出现起不了的现象,停在这里 Uncompressing Linux.................................... ...

  4. UIAtlas

    [UIAtlas] UIAtlas is a container that has coordinate information for a bunch of sprites. AtlasType有2 ...

  5. 专利系统数据库连接出现 base-64字符串中的无效字符 错误

    错误提示如图: 解决方法: 1.进注册表修改如下 2.进入系统配置页面http://10.10.0.70/eaf/init 对数据库进行重新配置 3.若不行再将如下密码修改一下 重启IIS生效

  6. Flask 上下文(Context)原理解析

    :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...

  7. Linux Resin4.0 安装配置

    Resin,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能优良,resin自身采用Java语言开发.Resin Pro版本支持缓存和负载均衡,收费 ...

  8. elasticsearch配置小记(转)

    原文  http://bigbo.github.io/pages/2015/04/10/elasticsearch_config/ 基于 elasticsearch 1.4.4 版本.安装方式为RPM ...

  9. 【FZU2280】Magic

    题意 给出n个字符串,每个字符串有一个权值wi 有q个操作,操作有两种 1 x y 将字符串x的权值变为y 2 x 查询操作,输出以字符串x为后缀,且权值小于等于wx的字符串个数.其中n<=10 ...

  10. R dataframe 遗忘, which 矩阵搜索

    A data frame is used for storing data tables. It is a list of vectors of equal length. For example, ...