Python 之异常处理机制
python在程序运行出现错误时时有相应的反应机制 ,我们可以针对不同的错误做出不同的响应
list1 = ['a','b','c']
print(list1[4]) #>>>IndexError: list index out of range
a = {"name":"Jack",
"age":22}
print(a["sex"]) #KeyError: 'sex'
例子中分别指出了两个错误:IndexError和KeyError。如果我们想对程序中是否出现了这种错误,可以抓取出来。下面我们就针对这两种错误举例
list1 = ['a','b','c']
a = {"name":"Jack",
"age":22}
try:
list1[2]
a["sex"] #这里是有错的!
except IndexError as e:
print("列表操作错误",e)
except KeyError as e:
print("没有这个key",e)
当try里的代码出现错误的话,通过except把错误获取
C:\Users\Aaron\Anaconda3\python.exe D:/python/week7/错误处理.py
没有这个key 'sex'
运行结果
这样就会得到了,可是如果会有很多种错误的话,每种错误都加个except也太麻烦了!就可以这么写:
list1 = ['a','b','c']
a = {"name":"Jack",
"age":22}
try:
list1[5] #这里是有错的!
a["sex"] #这里是有错的!
except (IndexError,KeyError) as e:
print("错误!",e)
但又出了个问题,用这种写法的话当出现错误,不能很好的显示错误的种类例子中两个条件都是错误的,只能显示成
C:\Users\Aaron\Anaconda3\python.exe D:/python/week7/错误处理.py
错误! list index out of range
运行结果
所以这种方式是不推荐使用的!可是既然可以这么写,是不是有其他的作用呢?这时需要一个另外的用法——万能异常:Exception,可以把所有的错误抓取。这时候就可以做排除已知错误外的所有未知错误。
list1 = ['a','b','c']
a = {"name":"Jack",
"age":22}
try:
list1[2]
a["name"]
open("没有这个文件.txt")#这里是有错的!
except IndexError as e:
print("列表操作错误",e)
except KeyError as e:
print("没有这个key",e)
except Exception as e:
print("未知错误",e)
在前面的错误类型都没有的话,可以显示最后的错误!
C:\Users\Aaron\Anaconda3\python.exe D:/python/week7/错误处理.py
未知错误 [Errno 2] No such file or directory: '没有这个文件.txt'
运行结果
总而言之,一般的异常处理结构是这样的:
list1 = ['a','b','c']
a = {"name":"Jack",
"age":22}
try:
list1[2]
a["name"]
open("没有这个文件.txt")#这里是有错的!
except (IndexError,KeyError) as e:
print("列表操作错误",e)
except KeyError as e:
print("没有这个key",e)
except Exception as e:
print("未知错误",e)
else:
print("一切正常")
finally:
print("无论是否发生异常,这里的代码都要执行")
我们现在看一看常用的异常代码
AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
常用异常
对了,还有一种异常处理在程序调试中可以用到:触发异常:
try:
raise KeyError
except KeyError as e:
print("没有这个Key",e)
在try中加入 raise,可以通过代码直接触发异常
最后,还有一种异常的用法:自定义异常
class concect_Error(Exception):
def __init__(self,msg):
self.msg = msg
try:
raise concect_Error("数据库连接失败")
except concect_Error as e:
print(e)
要注意的是,在定义错误的类中,一定要继承Exception的属性。自定义的类是属于Exception这个大类的!
Python 之异常处理机制的更多相关文章
- python的异常处理机制
异常机制己经成为衡量一门编程语言是否成熟的标准之一,使用异常处理机制的 Python 程序有更好的容错性,更加健壮. 对于计算机程序而言,情况就更复杂了一一没有人能保证自己写的程序永远不会出辛苦!就算 ...
- [python]python try异常处理机制
#python的try语句有两种风格 #一:种是处理异常(try/except/else) #二:种是无论是否发生异常都将执行最后的代码(try/finally) try/except/else风格 ...
- Python的异常处理机制 -- (转)
当你的程序中出现异常情况时就需要异常处理.比如当你打开一个不存在的文件时.当你的程序中有一些无效的语句时,Python会提示你有错误存在. 下面是一个拼写错误的例子,print写成了Print.Pyt ...
- python异常处理机制
python有五种异常处理机制,分别是 1.默认异常处理器. 如果我们没有对异常进行任何预防,那么程序在执行过程中发生异常就会中断程序,调用python默认的异常处理器,并在终端输出异常信息,如图所示 ...
- Python笔记(四):异常处理机制与 open()
(一) 异常处理机制概述 就像日常生活中会遇到各种意外情况一样(例如:你可能考虑过如果中了500w该怎么做),代码运行过程中也会遇到这种意外情况,python提供了这么一种机制,处理意外情况(就像如 ...
- python正确使用异常处理机制
一.不要过度使用异常 不可否认,Python 的异常机制确实方便,但滥用异常机制也会带来一些负面影响.过度使用异常主要表现在两个方面: 把异常和普通错误混淆在一起,不再编写任何错误处理代码,而是以简单 ...
- python基础-异常处理
一.错误和异常 程序中难免出现错误,而错误分成两种 1.1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def te ...
- python的异常处理
在所有的程序中,都会遇到异常,有些异常是代码编写的时候产生的,在前期过程中可能会直接导致程序无法运行.这一类的异常,在编写代码的时候,程序可以直接排查修改.但有些异常,是在程序运行过程中产生的,可能是 ...
- python的反射机制
转载自:http://www.cnblogs.com/feixuelove1009/p/5576206.html 对编程语言比较熟悉的朋友,应该知道"反射"这个机制.Python作 ...
随机推荐
- c# list批量添加 对象 到数据库的sql
public void AddList(List<ProModule.Model.pro_manifest_item> list) { Hashtable SQLStringList = ...
- php使用redis扩展以及安装redis(linux下)
一,安装redis 1,下载redis包:wget http://download.redis.io/releases/redis-2.8.9.tar.gz 2,解压redis包后,进入redis-2 ...
- veil-evasion免杀处理
veil-evasion 开启 y 配置安装 安装好之后,再次运行veil-evasion 有50个payload模块 update 升级 list 查看有哪些payload 选一个payload 它 ...
- 使用synchronized wait() notifyall() 实现简单的加减法同步 竞争抢答
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.co ...
- html position定位
一.fixed居中 css样式代码:{ position:fixed left: 0; right: 0; margin:0 auto; width:300px } 二.Position属性有四个值: ...
- as3.0橡皮擦功能
//主容器 var main:Sprite = new Sprite(); main.mouseEnabled = false; addChild(main) //临时容器(所有操作都将先画在临时容器 ...
- Numpy 数组操作
Numpy 数组操作 Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 修改数组形状 函数 描述 resh ...
- 199. Binary Tree Right Side View (Tree, Stack)
Given a binary tree, imagine yourself standing on the right side of it, return the values of the nod ...
- windows phpstudy如何扩展MongoDB
phpstudy如何扩展MongoDB 作者: default|标签:phpstudy MongoDB PHP|2017-9-9 10:17 phpstudy扩展MongoDB 前置工作安装PHPst ...
- Bootstrap(9) 巨幕页头缩略图和警告框组件
一.巨幕组件巨幕组件主要是展示网站的关键性区域.//在固定的范围内,有圆角 <div class="container"> <div class="ju ...