Python错误与异常

  1. 异常和错误

    1. 错误和异常

从软件方面来说,错误是语法或者逻辑上的,语法错误指示软件的结构上有错误,导致不能被解释器解释。当程序的语法正确后,剩下的就是逻辑错误了,逻辑错误可能是由于不完整或者不合法的输入所致。当Python检测到一个错误时,解释器就会指出当前流无法继续执行下去,这就出现了异常。

对异常的描述是:它是因为程序出现了错误而在正常控制流以外采取的行为,这个行为又分为两个阶段:首先是引起异常发生的错误,然后是检测(和采取可能的措施)阶段。

第一个阶段是发生在一个异常条件后发生的,只要检测到错误并且意识到异常条件,解释器就会触发一个异常。解释器通知当前控制流有错误发生。异常就是错误发生的信号,当前流被打断,用来处理这个错误并采取相应的操作。这就是第二阶段。

对异常的处理发生在第二阶段,异常引发后,可以调用不同的操作,可以忽略错误,或是减轻问题的影响后设法继续执行,所有的这些操作都是代表一种继续,或是控制的分支。关键是程序员在错误发生时可以指示程序如何执行。

  1. Python中的异常

  1. NameError:尝试访问一个未声明的变量
  2. ZeroDivisionError:除数为0
  3. SyntaxError:Python解释器语法错误
  4. IndexError:请求的索引超出序列范围
  5. KeyError:请求一个不存在的字典关键字
  6. IOError:输入/输出错误
  7. AttributeError:尝试访问未知的对象属性

    1. 检测和处理异常

异常可以通过try语句来检测,任何在try语句块中的代码都会被检测,检测有无异常发生。

try语句有两种主要的形式:try-except和try-finally语句。这两个语句是互斥的,只能使用其中的一个。一个try语句可以对应一个或多个except语句,但只能对应一个finally语句,或者是一个try-except-finally复合语句。

  1. try-except语句

try-except语句(以及更复杂的形式)定义了进行异常监控的一段代码,并且提供了异常处理的机制。

常见的语法格式如下:


try

try_suite #监控这里的异常

except Exception[, reason]:

except_suite #异常处理的代码


举例:

>>> try:

... f = open(‘bla‘, ‘r‘)

... except IOError, e:

... print ‘could not open file‘, e

...

could not open file [Errno 2] No such file or directory: ‘bla‘

程序运行时,解释器尝试执行try里面的语句块,如果代码块执行后没有发生错误,执行流会忽略except语句继续执行,当except语句所指定的异常发生后,保存下错误的原因,控制流立即跳转到对应的处理器(try子句的剩余语句将被忽略)。

  1. 带有多个except的try语句

可以把多个except语句连接在一起,处理一个try块中可能发生的多种异常。如下:


try

try_suite #监控这里的异常

except Exception1 [, reason]:

suite_for_exception_Exception1

except Exception2 [, reason]:

suite_for_exception_Exception2?

首先执行try子句,如果没有错误,忽略所有的except从句继续执行,如果发生异常,解释器将在这一串处理器(except子句)中查找匹配的异常,如果找到对应的处理器,执行流将跳转到这里。

  1. 处理多个异常的except语句

可以在一个except子句里处理多个异常,except语句在处理多个异常时要求异常被放在一个元组里:

except (Exception1, Exception2) [, reason]:

suite_for_Exception1_and_Exception2

事实上except语句可以处理任意多个异常,前提只是他们放在一个元组里,如下:

except (Exc1,[, Exc2 [, … ExcN]]) [, reason]:

suite_for_exceptions_Excl_to_ExcN

  1. 捕获所有异常

异常是遵循继承结构的,Exception是在最顶层。

try:

;

except Exception. e:

#error occurred, etc.

Python2.5,异常被迁移到了新式类上,启用了一个新的"所有的异常之母",这个类叫做BaseException,KeyboardInterrupt和SystemExit和Exception同级了。如果需要捕获所有的异常,格式如下:

try:

;

except BaseException, e:

#error occurred, etc.

  1. "异常参数"

异常也可以有参数,异常引发后会被传递给异常处理器。当异常被引发后参数是作为附加帮助信息传递给异常处理器的。标准内建异常提供至少一个参数,指示异常原因的一个字符串。添加异常参数的except扩展语法如下:

except (Exception1, Exception2, …, ExceptionN), [, reason):

suite_for_Exception1_to_ExceptionN_with_Argument

异常参数自身组成一个元组,并存储为类实例(异常类的实例)的属性。


?

#!/usr/bin/env python

?

def safe_float(obj):

‘safa version of float()‘

try:

retval = float(obj)

except (ValueError, TypeError), diag:

retval = str(diag)

return retval

?

def main():

‘handle all the data processing‘

log = open(‘cardlog.txt‘, ‘w‘)

try:

ccfile = open(‘carddata.txt‘, ‘r‘)

except IOError, e:

log.write(‘no txns this month\n‘)

log.close()

return

txns = ccfile.readlines()

ccfile.close()

total = 0.00

log.write(‘account log:\n‘)

?

for eachTxn in txns:

result = safe_float(eachTxn)

if isinstance(result, float):

total += result

log.write(‘data... processed\n‘)

else:

log.write(‘ignord: %s‘ % result)

print ‘$%.2f (new balance)‘ % (total)

log.close()

?

if __name__ == ‘__main__‘:

main()

  1. else子句

在try范围内没有异常被检测到时,执行else子句。在else范围中的任何代码执行前,在try范围中的所有代码必须完全成功。

try:

;

except Exception. e:

#error occurred, etc.

else:

;

  1. finally子句

finally子句是无论异常是否发生,是否捕捉都会执行的一段代码。语法示例如下:

try:

try:

A

except MyException:

B

else:

C

finally:

D

  1. try-except-else-finally语句

综合所有不同的可以处理异常的语法样式如下:

try:

try_suite

except Exception1:

suite_for_Exception1

except (Exception2, Exception3, Exception4):

suite_for_Exception2_3_and_4

except Exception5, Argument5:

原文地址:https://www.cnblogs.com/mrlayfolk/p/12024341.html

时间: 2024-10-12 23:35:37

Python错误与异常的相关文章

Python - 错误和异常 - 第十九天

Python 错误和异常 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍. Python 有两种错误很容易辨认:语法错误和异常. 语法错误 Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例 >>>while True print('Hello world')  File "<stdin>", line 1, in ?    while True print(

Python错误和异常概念

本文和大家分享的主要是python中常见的错误与异常及其相关处理方式,一起来看看吧,希望对大家学习python有所帮助. 1. 错误和异常的处理方式 1.常见的错误 1. a:NameError 2. if True:SyntaxError 3. f = oepn('1.txt'):IOError 4. 10/0:ZeroDivisionError 5. a = int('d'):ValueError 6. 程序运行中断:KeyboardInterrupt 2.Python-使用try_exce

Python错误和异常 学习笔记

错误和异常概念 错误: 1.语法错误:代码不符合解释器或者编译器语法 2.逻辑错误:不完整或者不合法输入或者计算出现问题 异常:执行过程中出现万体导致程序无法执行 1.程序遇到逻辑或者算法问题 2.运行过程中计算机错误(内存不够或者IO错误) 错误和异常区别 错误: 代码运行前的语法或者逻辑错误, 语法错误在执行前修改,逻辑错误无法修改 异常分为两个步骤: 1.异常产生,检查到错误且解释器认为是异常,抛出异常: 2.异常处理,截获异常,忽略或者终止程序处理异常 Python常见错误 常见错误:i

python 错误与异常

python 错误异常的处理 1 try: 2 1/0 3 except (ZeroDivisionError,NameError) as e: 4 print("这里给出可能的出错信息",e) 5 else: 6 print("如果try成功,执持这里") 7 finally: 8 print("最后执行的内容,不管是否出现异常,都会执行的语句") 9 10 try: 11 1/2 12 except (ZeroDivisionError,Na

Python 错误和异常

1.Python异常类 Python是面向对象语言,所以程序抛出的异常也是类.常见的Python异常有以下几个,大家只要大致扫一眼,有个映像,等到编程的时候,相信大家肯定会不只一次跟他们照面(除非你不用Python了). 异常 描述 NameError 尝试访问一个没有申明的变量 ZeroDivisionError 除数为0 SyntaxError 语法错误 IndexError 索引超出序列范围 KeyError 请求一个不存在的字典关键字 IOError 输入输出错误(比如你要读的文件不存在

Python 错误和异常小结[转]

原文链接    http://blog.csdn.net/sinchb/article/details/8392827 事先说明哦,这不是一篇关于Python异常的全面介绍的文章,这只是在学习Python异常后的一篇笔记式的记录和小结性质的文章.什么?你还不知道什么是异常,额... 1.Python异常类 Python是面向对象语言,所以程序抛出的异常也是类.常见的Python异常有以下几个,大家只要大致扫一眼,有个映像,等到编程的时候,相信大家肯定会不只一次跟他们照面(除非你不用Python了

Python 错误和异常小结

Python异常类  Python是面向对象语言,所以程序抛出的异常也是类.常见的Python异常有以下几个,大家只要大致扫一眼,有个映像,等到编程的时候,相信大家肯定会不只一次跟他们照面(除非你不用Python了). 异常 描述 NameError 尝试访问一个没有申明的变量 ZeroDivisionError 除数为0 SyntaxError 语法错误 IndexError 索引超出序列范围 KeyError 请求一个不存在的字典关键字 IOError 输入输出错误(比如你要读的文件不存在)

python错误和异常

语法:当没有语句异常发生时,else中的语句将会被执行. try: 这里是语句块except(IOerror),x:     #其中x代表异常的实例 print xelse: print "程序没有错误!" 案例: a=10 b=0 try: c = b/ a print c except (IOError ,ZeroDivisionError),x: print x else: print "no error" print "done" Pyt

以写代学:python 错误、异常、断言

1.错误 (1)语法错误 语法错误指示软件的结构上有错误,导致不能被解释器解释或编译器无法编译.这些错误必须在程序执行前纠正. (2)逻辑错误 逻辑错误可能是由于不完整或是不合法的输入所致.还可能是逻辑无法生成,计算,或是输出结果需要的过程无法执行 2.异常 (1)当python检测到一个错误时,解释器就会指出当前流已经无法继续执行下去,这时候就出现了异常 (2)异常是因为程序出现了错误而在正常控制流以外采取的行为.这个行为又分为两个阶段首先是引起异常发生的错误,然后是检测(和采取可能的措施)阶