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作 ...
随机推荐
- 在Laravel外独立使用laravel-mongodb
laravel框架外部使用laravel-mongodb 插件 下载安装方式主要根据github上的参考: https://github.com/jenssegers/laravel-mongodb# ...
- Eureka 剔除失效服务
Spring Cloud 版本: Dalston.SR5 服务端配置: # 关闭保护机制 eureka.server.enable-self-preservation=false #剔除失效服务间隔 ...
- JMeter学习(十三)目录介绍(转载)
转载自 http://www.cnblogs.com/yangxia-test JMeter也学了一阵子了,对于基本的操作已了解,再回过头来看看Jmeter的目录,本篇是对于它的目录进行一些简单的介绍 ...
- Android Studio 中的FindBugs插件使用,轻松帮你发现Bug (转)
在日常开发过程中难免会因为一时疏忽而留下一些Bug,这些Bug就是埋在程序里的定时炸弹,如果不能及时铲除就会导致程序的不稳定,异常或闪退的现象,从而导致用户的体验的下降.那么怎么才能找出这些埋在程序里 ...
- 【scrapy】其他问题
今天看<python爬虫开发与项目实践>的17章写代码的时候发现,一个方法的结尾带了红色波浪线: def _process_booklist_item(self,item): ''' 处理 ...
- 第九章 词典 (d1)散列:排解冲突(1)
- 动态规划 51nod 1183
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183 1183 编辑距离 基准时间限制:1 秒 空间限制:1 ...
- TOJ 3589 likaer的最长点距
传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3589 时间限制(普通/Jav a) ...
- 188. Best Time to Buy and Sell Stock IV (Array; DP)
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- Unity3D无限奔跑者Playmaker v1.5
这款功能丰富的移动准备包内含使您自己的各种各样的3D游戏运行的一切要素.无需编程! 功能 1 - 响应式滑动控制2 - 投掷炮弹3 - 可破坏物体4 - 能力提升道具- 金币磁铁- 护盾- 继续密钥- ...