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 之异常处理机制的更多相关文章

  1. python的异常处理机制

    异常机制己经成为衡量一门编程语言是否成熟的标准之一,使用异常处理机制的 Python 程序有更好的容错性,更加健壮. 对于计算机程序而言,情况就更复杂了一一没有人能保证自己写的程序永远不会出辛苦!就算 ...

  2. [python]python try异常处理机制

    #python的try语句有两种风格 #一:种是处理异常(try/except/else) #二:种是无论是否发生异常都将执行最后的代码(try/finally) try/except/else风格 ...

  3. Python的异常处理机制 -- (转)

    当你的程序中出现异常情况时就需要异常处理.比如当你打开一个不存在的文件时.当你的程序中有一些无效的语句时,Python会提示你有错误存在. 下面是一个拼写错误的例子,print写成了Print.Pyt ...

  4. python异常处理机制

    python有五种异常处理机制,分别是 1.默认异常处理器. 如果我们没有对异常进行任何预防,那么程序在执行过程中发生异常就会中断程序,调用python默认的异常处理器,并在终端输出异常信息,如图所示 ...

  5. Python笔记(四):异常处理机制与 open()

    (一)  异常处理机制概述 就像日常生活中会遇到各种意外情况一样(例如:你可能考虑过如果中了500w该怎么做),代码运行过程中也会遇到这种意外情况,python提供了这么一种机制,处理意外情况(就像如 ...

  6. python正确使用异常处理机制

    一.不要过度使用异常 不可否认,Python 的异常机制确实方便,但滥用异常机制也会带来一些负面影响.过度使用异常主要表现在两个方面: 把异常和普通错误混淆在一起,不再编写任何错误处理代码,而是以简单 ...

  7. python基础-异常处理

    一.错误和异常 程序中难免出现错误,而错误分成两种 1.1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def te ...

  8. python的异常处理

    在所有的程序中,都会遇到异常,有些异常是代码编写的时候产生的,在前期过程中可能会直接导致程序无法运行.这一类的异常,在编写代码的时候,程序可以直接排查修改.但有些异常,是在程序运行过程中产生的,可能是 ...

  9. python的反射机制

    转载自:http://www.cnblogs.com/feixuelove1009/p/5576206.html 对编程语言比较熟悉的朋友,应该知道"反射"这个机制.Python作 ...

随机推荐

  1. python 取当前日期

    import time time.strftime('%Y-%m-%d',time.localtime(time.time()))

  2. 下载安装windows版Redis

    链接       https://github.com/MicrosoftArchive/redis/releases 选择版本下载 在redis目录打开cmd命令输入 redis-server.ex ...

  3. 每月IT摘录201811

    技术 1.打牢基础,从会使用-了解原理-了解思想一步一步来,最怕基础很弱但却以什么都用过为荣的人,这样的人我招进来也只是初级而已,工作年限再多也没有用.少林里面,有功和拳之分,如蛇拳猴拳是拳,马步功石 ...

  4. NumPy Ndarray 对象

    NumPy Ndarray 对象 NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引. ndarray 对象是用于存放 ...

  5. 贪吃蛇GamePanel Java实现(二)

    package cn.tcc.snake.tcc.View; import java.awt.Color;import java.awt.Graphics; import javax.swing.JP ...

  6. laravel框架目录结构详解

  7. Qt: 记事本源代码

    界面编程之实例学习,系统记事本是个极好的参考,初学Delphi及后之c#,皆以记事本为参考,今以Qt学习,亦是如此. 期间搭建开发环境,复习c++知识,寻找模块对应功能,不一而足:现刻录其模块代码,以 ...

  8. vue生产环境部署总结

    参考:http://www.cnblogs.com/vipstone/p/6910255.html 1. vue项目根目录/config/index.js更改资源生成路径 assetsPublicPa ...

  9. Exceptions

    [定义] error: external, like out of memory exception: internal, like file not found 父类都是throwable 逻辑有错 ...

  10. SAP transportation

    1.CONFIGURATION TRANSPORT flow:DEV(100) --scc1--> DEV(400) --STMS after release-> QAS(510) --S ...