Python 异常机制
1、异常基础
在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!!
- try:
- pass # 程序正常执行时做什么操作
- except Exception,ex: #3.0格式为 except Exception as ex:
- pass # 异常时候做什么操作
需求:将用户输入的两个数字相加
- while True:
- num1 = input('num1:')
- num2 = input('num2:')
- try:
- num1 = int(num1)
- num2 = int(num2)
- result = num1 + num2
- except Exception as e:
- print ('出现异常,信息如下:')
- print e # 异常错误消息
2、异常种类
Python中的异常种类非常多,每个异常专门用于处理某一项异常
- AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
- IOError 输入/输出异常;基本上是无法打开文件
- ImportError 无法引入模块或包;基本上是路径问题或名称错误
- IndentationError 语法错误(的子类) ;代码没有正确对齐
- IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
- KeyError 试图访问字典里不存在的键
- KeyboardInterrupt Ctrl+C被按下
- NameError 使用一个还未被赋予对象的变量
- SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
- TypeError 传入对象类型与要求的不符合
- UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
- 导致你以为正在访问它
- ValueError 传入一个调用者不期望的值,即使值的类型是正确的
- 常用异常
常用异常
- ArithmeticError
- AssertionError
- AttributeError
- BaseException
- BufferError
- BytesWarning
- DeprecationWarning
- EnvironmentError
- EOFError
- Exception
- FloatingPointError
- FutureWarning
- GeneratorExit
- ImportError
- ImportWarning
- IndentationError
- IndexError
- IOError
- KeyboardInterrupt
- KeyError
- LookupError
- MemoryError
- NameError
- NotImplementedError
- OSError
- OverflowError
- PendingDeprecationWarning
- ReferenceError
- RuntimeError
- RuntimeWarning
- StandardError
- StopIteration
- SyntaxError
- SyntaxWarning
- SystemError
- SystemExit
- TabError
- TypeError
- UnboundLocalError
- UnicodeDecodeError
- UnicodeEncodeError
- UnicodeError
- UnicodeTranslateError
- UnicodeWarning
- UserWarning
- ValueError
- Warning
- ZeroDivisionError
- 更多异常
更多异常
- dic = ["wupeiqi", 'alex']
- try:
- dic[10]
- except IndexError as e:
- print e
实例索引错误
对于上述实例,异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。
- # 未捕获到异常,程序直接报错
- s1 = 'hello'
- try:
- int(s1)
- except IndexError as e:
- print e
所以,写程序时需要考虑到try代码块中可能出现的任意异常,可以这样写:
- s1 = 'hello'
- try:
- int(s1)
- except IndexError,e:
- print e
- except KeyError,e:
- print e
- except ValueError,e:
- print e
万能异常 在python的异常中,有一个万能异常:Exception(有特殊的异常也无法捕获),他可以捕获任意异常,即
- s1 = 'hello'
- try:
- int(s1)
- except Exception as e:
- print e
接下来你可能要问了,既然有这个万能异常,其他异常是不是就可以忽略了!
答:当然不是,对于特殊处理或提醒的异常需要先定义,最后定义Exception来确保程序正常运行。
- s1 = 'hello'
- try:
- int(s1)
- except KeyError,e:
- print '键错误'
- except IndexError,e:
- print '索引错误'
- except Exception, e:
- print '错误'
3、异常其他结构
- try:
- # 主代码块
- pass
- except KeyError,e:
- # 异常时,执行该块
- pass
- else:
- # 主代码块执行完,执行该块
- pass
- finally:
- # 无论异常与否,最终执行该块
- pass
4、主动触发异常
- try:
- raise Exception('错误了。。。')
- except Exception,e:
- print e
5、自定义异常
- class MyException(Exception):
- def __init__(self, msg):
- self.message = msg
- def __str__(self):
- return self.message
- try:
- raise MyException('我的异常')
- except MyException as e:
- print e
>>> 我的异常
# 其实上述代码完全可以换成print(MyException("我的异常")),为什么要这么麻烦写很多很多呢? 或者说自定义异常有什么用?
上述的方式表示明确的告诉别人 调用异常, 而print(MyException("我的异常")),无法明确的表示出异常
6、断言 assert
- # assert 条件
- a = 1
try:
assert a ==1
except MyException as e
print(e)
作用: 明确的断定前面的某一个值必须是正确的,正确则继续往下走,否则抛出异常,程序退出
Python 异常机制的更多相关文章
- 【Python&数据结构】 抽象数据类型 Python类机制和异常
这篇是<数据结构与算法Python语言描述>的笔记,但是大头在Python类机制和面向对象编程的说明上面.我也不知道该放什么分类了..总之之前也没怎么认真接触过基于类而不是独立函数的Pyt ...
- python的异常机制使用技巧
1.当你开发的接口被其他应用调用时,响应要及时,但是有些要触发的操作很耗时间. 比如下面需要通过被调用触发的函数create_job_1().但是这个函数执行会比较消耗时间 2.于是,我们可以利用异常 ...
- python——异常except语句用法与引发异常
except: #捕获所有异常 except: <异常名>: #捕获指定异常 except:<异常名1,异常名2):捕获异常1或者异常2 except:<异常名>,< ...
- Python内部机制-PyObject对象
PyObject对象机制的基石 学过Python的人应该非常清晰,Python中一切都是对象,全部的对象都有一个共同的基类,对于本篇博文来说,一切皆是对象则是探索Python的对象机制的一个入口点.我 ...
- python 异常
引用一段来自菜鸟教程的文章:http://www.runoob.com/python/python-exceptions.html Python 异常处理 python提供了两个非常重要的功能来处理p ...
- Atitit 异常机制与异常处理的原理与概论
Atitit 异常机制与异常处理的原理与概论 1. 异常vs 返回码1 1.1. 返回码模式的处理 (瀑布if 跳到失败1 1.2. 终止模式 vs 恢复模式(asp2 1.3. 异常机制的设计原理 ...
- C++ 异常机制分析
C++异常机制概述 异常处理是C++的一项语言机制,用于在程序中处理异常事件.异常事件在C++中表示为异常对象.异常事件发生时,程序使用throw关键字抛出异常表达式,抛出点称为异常出现点,由操作系统 ...
- 【转载】C++异常机制的学习
参考了这篇文章:http://blog.chinaunix.net/uid-24517549-id-4079174.html 关于线程 进程和线程的概念相信各位看官早已耳熟能详.在这里,我只想带大家回 ...
- Java异常机制
Java异常分类 异常表明程序运行发生了意外,导致正常流程发生错误,例如数学上的除0,打开一个文件但此文件实际不存在,用户输入非法的参数等.在C语言中我们处理这类事件一般是将其与代码正常的流程放在一起 ...
随机推荐
- thinkPHP 数字字典
- Python学习笔记----序列共性
序列操作符 作用seq[ind] 获得下标为ind 的元素seq[ind1:ind2] 获得下标从ind1 到ind2 间的元素集合seq * expr 序列重复expr 次seq1 + seq2 连 ...
- [转]不正当使用HashMap导致cpu 100%的问题追究
以前项目中遇到类似业务,但使用的是CurrentHashMap,看到这篇文章,转载记录,警示自己. 以下内容转自: 转载自并发编程网 – ifeve.com(http://ifeve.com/hash ...
- [转][C/C++] 怎样不用中间变量temp 实现两个数交换
第一类方法也是常用的方法,通过多次的数值计算来完成交换,到现在知道的有下面三种: (1)加减法. a = a + b; b = a - b; a = a - b; 该方法可以交换整型和浮点型数值的变量 ...
- 关于MediaPlayer的详细介绍
1)如何获得MediaPlayer实例:可以使用直接new的方式:MediaPlayer mp = new MediaPlayer();也可以使用create的方式,如:MediaPlayer mp ...
- PHP 面向对象编程(2)
一些内建方法: class Person { public $isAlive = true; function __construct($name) { //这里我们创建了一个name的属性 $thi ...
- SharePoint 2013 开发——其他社交功能
博客地址:http://blog.csdn.net/FoxDave 上一篇讲了如何获取用户配置文件的相关属性,它属于SharePoint 2013社交功能的一个小的构成部分.社交功能是SharePoi ...
- hive的基本操作
1.创建表 First, create a table with tab-delimited text file format: (1)CREATE TABLE u_data ( userid INT ...
- ACM 杂题,思路题 整理
UVa 11572 - Unique Snowflakes 问一个数组中,无重复数字的最长子串长度是多少. 用map维护某数字上次出现的位置.另外用变量last表示上次出现数字重复的位置. 如果出现重 ...
- checkbox选中与取消选择
先上代码 <form> 你爱好的运动是?<br/> <input type="checkbox" name="items" val ...