python课件:Python异常
- 格式:pptx
- 大小:80.49 KB
- 文档页数:5
Python中的异常类型及处理⽅式⽰例详解⽬录前⾔正⽂⼀、什么是异常⼆、异常的类型三、异常处理四、try 介绍五、finally 介绍六、raise 介绍结尾前⾔Python 是⼀种⾯向对象的、解释型的、通⽤的、开源的脚本编程语⾔。
现在市⾯上 Python ⾮常的流⾏,主要是因为它简单易⽤,学习成本低,⽐如要实现某个功能,Python 可能只需要⼏⾏代码,⽽⽤C语⾔可能需要上百⾏代码,因为C语⾔什么都要得从头开始编码,⽽ Python 已经内置了很多功能模块,所以,我们只需要导⼊特定的包,就可以实现想要的效果。
正⽂今天,我们主要来了解⼀下 Python 中的异常类型以及它们的处理⽅式。
说到异常处理,我们⾸先要知道什么是异常。
其实,异常就是⼀类事件,当它们发⽣时,会影响到程序的正常执⾏。
⼀、什么是异常其实,异常就是⼀类事件,当此类事件在程序执⾏过程中发⽣时,就会影响程序的正常执⾏。
⼀般情况下,在 Python ⽆法正常处理程序时就会发⽣⼀个异常,⽽异常是Python 的⼀种对象类型,⽤来表⽰⼀个错误。
当 Python 脚本发⽣异常时我们需要捕获并处理它,否则程序就会终⽌。
⼆、异常的类型Python 中定义了⼀些标准的异常类型,具体的异常名称和对应的实际意义,我们可以通过下⾯的表格来了解。
异常名称描述BaseException所有异常的基类SystemExit解释器请求退出KeyboardInterrupt⽤户中断执⾏(通常是输⼊^C)Exception常规错误的基类StopIteration迭代器没有更多的值GeneratorExit⽣成器(generator)发⽣异常来通知退出StandardError所有的内建标准异常的基类ArithmeticError所有数值计算错误的基类FloatingPointError浮点计算错误OverflowError数值运算超出最⼤限制ZeroDivisionError除(或取模)零 (所有数据类型)AssertionError断⾔语句失败AttributeError对象没有这个属性EOFError没有内建输⼊,到达EOF 标记EnvironmentError操作系统错误的基类IOError输⼊/输出操作失败OSError操作系统错误WindowsError系统调⽤失败ImportError导⼊模块/对象失败LookupError⽆效数据查询的基类IndexError序列中没有此索引(index)KeyError映射中没有这个键MemoryError内存溢出错误(对于Python 解释器不是致命的)NameError未声明/初始化对象 (没有属性)UnboundLocalError访问未初始化的本地变量ReferenceError弱引⽤(Weak reference)试图访问已经垃圾回收了的对象RuntimeError⼀般的运⾏时错误NotImplementedError尚未实现的⽅法SyntaxError Python 语法错误IndentationError缩进错误TabError Tab 和空格混⽤SystemError⼀般的解释器系统错误TypeError对类型⽆效的操作ValueError传⼊⽆效的参数UnicodeError Unicode 相关的错误UnicodeDecodeError Unicode 解码时的错误UnicodeEncodeError Unicode 编码时错误UnicodeTranslateError Unicode 转换时错误Warning警告的基类DeprecationWarning关于被弃⽤的特征的警告FutureWarning关于构造将来语义会有改变的警告OverflowWarning旧的关于⾃动提升为长整型(long)的警告PendingDeprecationWarning关于特性将会被废弃的警告RuntimeWarning可疑的运⾏时⾏为(runtime behavior)的警告SyntaxWarning可疑的语法的警告UserWarning⽤户代码⽣成的警告其实,在上述表格中列出的异常中,也具备⼀定的层次关系,我们可以通过下图来了解⼀下。
16.python异常处理Python 有两种错误很容易辨认:语法错误和异常(本⽂将重点介绍python的异常)。
python语法错误:Python 的语法错误或者称之为解析错,是初学者经常碰到的;>>>while True print('Hello world')File "<stdin>", line 1, in ?while True print('Hello world')^SyntaxError: invalid syntax函数 print() 被检查到有错误,是它前⾯缺少了⼀个冒号 : 。
语法分析器指出了出错的⼀⾏,并且在最先找到的错误的位置标记了⼀个⼩⼩的箭头。
python异常:即便 Python 程序的语法是正确的,在运⾏它的时候,也有可能发⽣错误。
运⾏期检测到的错误被称为异常。
异常即是⼀个事件,该事件会在程序执⾏过程中发⽣,影响了程序的正常执⾏;⼀般情况下,在Python⽆法正常处理程序时就会发⽣⼀个异常;异常是Python对象,表⽰⼀个错误;当Python脚本发⽣异常时我们需要捕获处理它,否则程序会终⽌执⾏。
>>>10 * (1/0) # 0 不能作为除数,触发异常Traceback (most recent call last):File "<stdin>", line 1, in ?ZeroDivisionError: division by zero>>> 4 + spam*3 # spam 未定义,触发异常Traceback (most recent call last):File "<stdin>", line 1, in ?NameError: name 'spam'is not defined>>> '2' + 2 # int 不能与 str 相加,触发异常Traceback (most recent call last):File "<stdin>", line 1, in ?TypeError: Can't convert 'int' object to str implicitly异常以不同的类型出现,这些类型都作为信息的⼀部分打印出来: 例⼦中的类型有 ZeroDivisionError,NameError 和 TypeError。
python异常处理python异常处理Python提供了⾮常重要的功能来处理程序运⾏中出现的异常。
在程序运⾏过程中,由于编码不规范等造成程序⽆法正常运⾏,此时程序会报错。
⼀、异常与错误1、有的错误是程序编写有问题造成的,⽐如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的。
2、有的错误是⽤户输⼊造成的,⽐如让⽤户输⼊email地址,结果得到⼀个空字符串,这种错误可以通过检查⽤户输⼊来做相应的处理。
3、还有⼀类错误是完全⽆法在程序运⾏过程中预测的,⽐如写⼊⽂件的时候,磁盘满了,写不进去了,或者从⽹络抓取数据,⽹络突然断掉了。
⽐如在做除法运算时,除数为0等这类错误也称为异常,在程序中通常是必须处理的,否则,程序会因为各种问题终⽌并退出。
#除法运算def div(a,b):return a/bx=div(5,0)print(x)#运⾏出错,ZeroDivisionError: division by zero Python内置了⼀套异常处理机制,来帮助我们进⾏错误处理。
⼆、python的异常机制1、语法格式:try:语句块1except Exception as e: #给异常起了个变量名e语句块2#多个异常处理⽅法#except (异常1,异常2) as e: #多个异常,⽤元组# 语句块3else: #如果语句块1没出现异常,直接执⾏语句块4,语句块4finally: #最终都会被执⾏的代码语句块5 2、python的异常机制主要依赖 try 、except 、else、finally 和 raise 五个关键字:try 关键字后缩进的代码块简称 try 块,它⾥⾯放置的是可能引发异常的代码在 except 后对应的是异常类型和⼀个代码块,⽤于表明该 except 块处理这种类型的代码块在多个 except 块之后可以放⼀个 else 块,表明程序不出现异常时还要执⾏ else 块最后还可以跟⼀个 finally 块,finally 块⽤于回收在 try 块⾥打开的物理资源,异常机制会保证 finally 块总被执⾏raise ⽤于引发⼀个实际的异常,raise 可以单独作为语句使⽤,引发⼀个具体的异常对象3、异常处理语句块的执⾏流程4、异常底层处理如果在执⾏try块⾥的业务逻辑代码时出现异常,系统⾃动⽣成⼀个异常对象,该异常对象被提交给python解释器,这个过程被称为引发(触发)异常。
Python错误和异常代码详解程序中的错误⼀般被称为 Bug,⽆可否认,这⼏乎总是程序员的错。
程序员的⼀⽣,始终伴随着⼀件事 - 调试(错误检测、异常处理)。
反反复复,最可怕的是:不仅⾃⼰的要改,别⼈的也要改。
⼀万头草泥马奔腾⽽过!错误程序错误,主要分为三类:语法错误逻辑错误运⾏时错误语法错误语法错误(也称:解析错误):是指不遵循语⾔的语法结构引起的错误(程序⽆法正常编译/运⾏)。
在编译语⾔(例如:C++)中,语法错误只在编译期出现,编译器要求所有的语法都正确,才能正常编译。
不过对于直译语⾔(例如:Python)来说,语法错误可能在运⾏期才会出现,⽽且不太容易区分语法错误及语义错误。
常见的 Python 语法错误有:遗漏了某些必要的符号(冒号、逗号或括号)关键字拼写错误缩进不正确空语句块(需要⽤ pass 语句)例如,编写这样⼀个条件判断语句:>>> if n < 5File "<stdin>", line 1if n < 5^SyntaxError: invalid syntax由于 if 语句中缺少⼀个冒号(:),不符合 Python 语法,因此程序⽆法正常运⾏。
逻辑错误逻辑错误(也称:语义错误):是指程序的执⾏结果与预期不符(程序可以正常运⾏,不会 Crash)。
与语法错误不同的是,逻辑错误从语法上来说是正确的,但会产⽣意外的输出或结果,并不⼀定会被⽴即发现。
逻辑错误的唯⼀表现就是错误的运⾏结果。
常见的逻辑错误有:运算符优先级考虑不周变量名使⽤不正确语句块缩进层次不对在布尔表达式中出错例如,要计算两个数的平均值:>>> def average(a, b):... return a + b / 2 # 应为 (a + b) / 2...>>>虽然程序能够正常运⾏,但代码中缺少括号,由于运算符优先级(先乘除,后加减)的缘故,运算结果并不正确。
Python异常处理实例详解异常即是⼀个事件,该事件会在程序执⾏过程中发⽣,影响了程序的正常执⾏。
⼀般情况下,在Python⽆法正常处理程序时就会发⽣⼀个异常。
异常是Python对象,表⽰⼀个错误。
当Python脚本发⽣异常时我们需要捕获处理它,否则程序会终⽌执⾏。
捕捉异常可以使⽤try/except语句。
try/except语句⽤来检测try语句块中的错误,从⽽让except语句捕获异常信息并处理。
如果你不想在异常发⽣时结束你的程序,只需在try⾥捕获它。
以下为简单的try....except...else的语法:复制代码代码如下:try:<语句> #运⾏别的代码except <名字>:<语句> #如果在try部份引发了'name'异常except <名字>,<数据>:<语句> #如果引发了'name'异常,获得附加的数据else:<语句> #如果没有异常发⽣try的⼯作原理是,当开始⼀个try语句后,python就在当前程序的上下⽂中作标记,这样当异常出现时就可以回到这⾥,try⼦句先执⾏,接下来会发⽣什么依赖于执⾏时是否出现异常。
如果当try后的语句执⾏时发⽣异常,python就跳回到try并执⾏第⼀个匹配该异常的except⼦句,异常处理完毕,控制流就通过整个try语句(除⾮在处理异常时⼜引发新的异常)。
如果在try后的语句⾥发⽣了异常,却没有匹配的except⼦句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
如果在try⼦句执⾏时没有发⽣异常,python将执⾏else语句后的语句(如果有else的话),然后控制流通过整个try语句。
下⾯是简单的例⼦,它打开⼀个⽂件,在该⽂件中的内容写⼊内容,且并未发⽣异常:复制代码代码如下:#!/usr/bin/pythontry:fh = open("testfile", "w")fh.write("This is my test file for exception handling!!")except IOError:print "Error: can\'t find file or read data"else:print "Written content in the file successfully"fh.close()以上程序输出结果:复制代码代码如下:Written content in the file successfully下⾯是简单的例⼦,它打开⼀个⽂件,在该⽂件中的内容写⼊内容,但⽂件没有写⼊权限,发⽣了异常:复制代码代码如下:#!/usr/bin/pythontry:fh = open("testfile", "w")fh.write("This is my test file for exception handling!!")except IOError:print "Error: can\'t find file or read data"else:print "Written content in the file successfully"以上程序输出结果:复制代码代码如下:Error: can't find file or read data你可以不带任何异常类型使⽤except,如下实例:复制代码代码如下:try:You do your operations here;......................except:If there is any exception, then execute this block.......................else:If there is no exception then execute this block.以上⽅式try-except语句捕获所有发⽣的异常。