什么是异常

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

Raise语句:

异常可以在某些东西出错时自动引发。为了引发异常有两种方式:

.使用一个类,应该是Excepion的子类(使用类时,程序会自动创建类的一个实例)
.实例参数调用raise语句。

实例(使用内建Exception异常类):

In []: raise Exception
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
<ipython-input--fca2ab0ca76b> in <module>()
----> raise Exception Exception:
#raise Exception 引发一个没有任何有关错误信息的普通异常。
In []: raise Exception('The Hyperdrive overload')
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
<ipython-input--3d981203beac> in <module>()
----> raise Exception('The Hyperdrive overload') Exception: The Hyperdrive overload
#添加了错误信息

内建异常类:

内建异常类很多,都在exceptions模块中。官网手册(3.5.1版本),在3.5.1+中,被集成在内置模块中。

id 类名 描述
1 raise Exception 所有异常的基类
2 raise AttributeError 特征引用或者赋值失败时引发的
3 raise IOError 试图打在不存在的文件(包括其他情况)
4 raise IndexError 使用序列中不存在的索引
5 raise KeyError 使用映射中不存在的键
6 raise NameError 找不到名字(变量)
7 raise SyntaxError 在代码为错误形式时引发
8 raise TypeError 在内建操作或者函数应用与错误类型的对象时
9 raise ValueError 正确的类型对象,但是对象使用不合适的值
10 raise ZeroDivisionError 除法,第二参数为0

自定义异常类:

确保从Exception类继承,直接或者间接都可以(可以是其他内建异常类的子类),编写一个自定义异常类如下:

#!/usr/bin/env python
# encoding: utf-8
"""
@author: kamil.liu @file: exception.py
@time: 16-5-30 上午10:56
"""
# raise Exception
# raise AttributeError
# raise IOError
# raise IndexError
# raise KeyError
# raise NameError
# raise SyntaxError
# raise TypeError
# raise ValueError
# raise ZeroDivisionError
class kamilException(Exception):
pass
print(type(kamilException))
print(dir(kamilException))

结果:

/usr/bin/python3.5 /home/kamil/PycharmProjects/untitled/test1/exception.py
<class 'type'>
['__cause__', '__class__', '__context__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__suppress_context__', '__traceback__', '__weakref__', 'args', 'with_traceback'] Process finished with exit code 0

python2 python3 处理异常的区别:

1.所以异常都从 BaseException继承,并删除了StardardError
2.去除了异常类的序列行为和.message属性
3.用 raise Exception(args)代替 raise Exception, args语法
4.捕获异常的语法改变,引入了as关键字来标识异常实例,在Py2中:
>>> try:
... raise NotImplementedError('Error')
... except NotImplementedError, error: ... print error.message
...
Error
在Py3中:
>>> try:
raise NotImplementedError('Error')
except NotImplementedError as error: #注意这个 as
print(str(error))
Error
5.异常链,因为__context__在3.0a1版本中没有实现

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

  1. python3异常处理 try

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

  2. Python3异常处理

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

  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. 条件变量pthread_cond_t怎么用

    #include <pthread.h> #include <stdio.h> #include <stdlib.h> pthread_mutex_t mutex ...

  2. QT 数据库编程一

    QT如果要进行网络编程首先需要在.pro中添加如下代码:QT += network //logindlg.h #ifndef LOGINDLG_H #define LOGINDLG_H #includ ...

  3. Method not found: '!!0[] System.Array.Empty()'.

    错误原因:程序里面没有可调用的方法(程序使用的是 .NET Framework 4.6,但是你自己的系统里面使用的不是 4.6版本) 解决方法:1.安装window sp1  ,下载地址是:https ...

  4. 【转】CSS样式覆盖规则

    大家都知道CSS的全称叫做“层叠样式表”,但估计很多人都不知道“层叠”二字的含义.其实,“层叠”指的就是样式的覆盖,当一个元素被运用上多种样式,并且出现重名的样式属性时,浏览器必须从中选择一个属性值, ...

  5. JavaScript的attribute和property辨析

    1.Attribute Attribute是HTML上设置的属性,在html中显式地设置,或者通过setAttribute()方法设置. <input type='text' id='txt' ...

  6. CentOS6.6搭建LNMP环境

    CentOS6.6搭建LNMP环境 1.设置yum源,本地安装依赖包 1 yum -y install gcc gcc-c++ automake autoconf libtool make 2.下载依 ...

  7. js中奇特的for循环写法

    //正常的for循环 for(var i=0;i<10;i++){ console.log(i); } //输出:1,2,3……10 //简写 for(var i=10;i--;){ conso ...

  8. java 计算地球上两点间距离

    /** * 计算地球上任意两点(经纬度)距离 * * @param long1 * 第一点经度 * @param lat1 * 第一点纬度 * @param long2 * 第二点经度 * @para ...

  9. Beta冲刺---Day1

    站立式会议 站立式会议内容总结: 照片 老师是对的,其实无论在什么时候,都不会有一段很长很空闲的时间.比如说这个时候就还是有一大堆的作业.考试. 希望我们组员能够告别拖延症,然后再编码的时候全心地投入 ...

  10. Beta版本冲刺———第六天

    会议照片: 项目燃尽图: 1.项目进展: 该项目的Beta版本冲刺到今天就大体结束,但是小组依然困在"如何保存每次游戏的分数,并将其排序列在排行榜中"的问题上,小组四个人都在一起解 ...