欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > PPTX文档下载
    分享到微信 分享到微博 分享到QQ空间

    8+Python程序设计+异常处理结构与程序调试.pptx

    • 资源ID:18781073       资源大小:141.72KB        全文页数:29页
    • 资源格式: PPTX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    8+Python程序设计+异常处理结构与程序调试.pptx

    1、第8章 异常处理结构与程序调试,异常(exception),简单地说,异常是指程序运行时引发的错误。引发错误的原因有很多,例如除零、下标越界、文件不存在、网络异常、类型错误、名字错误、字典键错误、磁盘空间不足,等等。如果这些错误得不到正确的处理将会导致程序终止运行,而合理地使用异常处理结果可以使得程序更加健壮,具有更强的容错性,不会因为用户不小心的错误输入或其他运行时原因而造成程序终止。也可以使用异常处理结构为用户提供更加友好的提示。程序出现异常或错误之后是否能够调试程序并快速定位和解决存在的问题也是程序员综合水平和能力的重要体现方式之一。,8.1 什么是异常,语法错误和逻辑错误不属于异常,但

    2、有些语法错误往往会导致异常,例如由于大小写拼写错误而访问不存在的对象。当Python检测到一个错误时,解释器就会指出当前流已无法继续执行下去,这时候就出现了异常。异常是指因为程序出错而在正常控制流以外采取的行为。异常分为两个阶段:第一个阶段是引起异常发生的错误;第二个阶段是检测并处理阶段。不建议使用异常来代替常规的检查,如if.else判断。应避免过多依赖于异常处理机制。当程序出现错误,python会自动引发异常,也可以通过raise显式地引发异常。,8.2 Python中的异常类,下面列出了常用的异常类,抛出异常raise语句,主动抛出异常定义自己的异常类时;或者需要抛出异常时。raise语

    3、法SomeException:必须是一个异常类,或异常类的实例;Args:传递给SomeException的参数,必须是一个元组;Traceback:很少用,主要是用来提供一个traceback对象。,raise SomeException,args,traceback,自定义异常类,下面的例子演示了自定义的异常类必须继承Exception类:所有异常类的基类;,class MyError(Exception):def _init_(self,value):self.value=value def _str_(self):return repr(self.value),try:raise My

    4、Error(2*2)except MyError as e:print(My exception occurred,value:,e.value)My exception occurred,value:4 raise MyError(oops!)Traceback(most recent call last):File,line 1,in?_main_.MyError:oops!,8.3 Python中的异常处理结构,常见的异常处理结构try.except结构try.except.else结构带有多个except的try结构try.except.finally结构,8.3.1 try.exce

    5、pt结构,这是最基本的处理结构;具有两种形式。,代码处理形式一try:try_block#被监控的代码except Exception,reason:except_block#异常处理代码,代码处理形式二try:.except BaseException,e:except_block优势:能够处理所有的异常,建议尽量显式捕捉可能会出现的异常,并编写具有针对性的代码;最后一个except用来捕捉BaseException。,try.except:示例1,while True:try:x=int(input(Please enter a number:)break except ValueErro

    6、r:print(That was no valid number.Try again.),Please enter a number:aThat was no valid number.Try again.Please enter a number:bThat was no valid number.Try again.Please enter a number:cThat was no valid number.Try again.Please enter a number:10,try.except:示例2,try:raise Exception(spam,eggs)except Exce

    7、ption as inst:print(type(inst)#the exception instance print(inst.args)#arguments stored in.args print(inst)#_str_ allows args to be printed directly,#but may be overridden in exception subclasses x,y=inst.args#unpack args print(x=,x)print(y=,y)(spam,eggs)(spam,eggs)x=spamy=eggs,8.3.2 try.except.else

    8、:示例1,分析上述的代码输入错误:例如输入了非数值,或者输入的数值超出了正常的序号,会产生异常;执行红色print语句,并继续循环;其他的情况:输出列表中正确的字符串,并且退出循环。,a_list=China,America,England,Francewhile True:print(请输入字符串的序号)n=int(input()try:print(a_listn)except IndexError:print(列表元素的下标越界,请重新输入字符串的序号)else:break,try.except.else:示例2,分析功能:读取并输出文件的内容。在出现例外的情况下,执行红色的print语句

    9、后,结束程序的执行;在没有例外的情况下,执行else块的内容。,for arg in sys.argv1:try:f=open(arg,r)except IOError:print(cannot open,arg)else:print(arg,has,len(f.readlines(),lines)f.close(),8.3.3 带有多个except的try结构,功能:根据实际产生的例外,执行其中的例外程序块。,try:try_block#被监控的语句except Exception1:except_block_1#处理异常1的语句except Exception2:except_block_

    10、2#处理异常2的语句.,带有多个except的try:示例1,典型例子:除法。,try:x=int(input(请输入被除数:)y=int(input(请输入除数:)z=float(x)/yexcept ZeroDivisionError:print(除数不能为零)except TypeError:print(被除数和除数应为数值类型)except NameError:print(变量不存在)else:print(x,/,y,=,z),带有多个except的try:示例2,当有多个except块而且处理相同时,可以使用元组的形式处理。,import systry:f=open(sample.t

    11、xt)s=f.readline()i=int(s.strip()except OSError as err:print(OS error:0.format(err)except ValueError:print(Could not convert data to an integer.)except:print(Unexpected error:,sys.exc_info()0)raise,import systry:f=open(sample.txt)s=f.readline()i=int(s.strip()except(OSError,ValueError,RuntimeError,Nam

    12、eError):pass,8.3.4 try.except.finally结构,特点Finally中的语句总会执行;可以用于清理工作,以便释放资源。典型结构如下,try:try_block#被监控的代码except:except_block#例外处理程序块finally:finally_block#无论如何都会执行,典型例子 try:3/0except:print(3)finally:print(5)35,try.except.finally:示例1,典型例程:文件的读取。,try:f=open(sample.txt,r)line=f.readline()print(line)finally:

    13、f.close(),try:f=open(sample2.txt,r)line=f.readline()print(line)finally:f.close()Traceback(most recent call last):File,line 6,in f.close()NameError:name f is not defined,完美代码?,如果文件没有创建,则在finally中会产生异常。,try.except.finally:示例2,例外产生之后,需要有相应的处理。如果没有相应的except处理块,代码的执行顺序会发生改变,直到找到相应的except处理块或者程序退出为止。,divi

    14、de(2,1)result is 2.0executing finally clause divide(2,0)division by zero!executing finally clause divide(2,1)executing finally clauseTraceback(most recent call last):File,line 1,in File,line 3,in divideTypeError:unsupported operand type(s)for/:str and str,def divide(x,y):try:result=x/y except ZeroDi

    15、visionError:print(division by zero!)else:print(result is,result)finally:print(executing finally clause),try.except.finally:示例3,finally代码中:返回值要慎重!,def demo_div(a,b):try:return a/b except:pass finally:return-1,demo_div(1,0)-1 demo_div(1,2)-1 demo_div(10,2),8.4 断言与上下文处理,断言与上下文处理两种特殊的异常处理形式;形式上比通常的异常处理简

    16、单;,8.4.1 断言,断言语句的语法assert expression,reason 当判断表达式expression为真时,什么都不做;如果表达式为假,则抛出异常。assert语句用途一般用于开发程序时对特定必须满足的条件进行验证,仅当_debug_为True时有效。当Python脚本以-O选项编译为字节码文件时,assert语句将被移除以提高运行速度。,断言:示例1,try:assert 1=2,1 is not equal 2!except AssertionError as reason:print(%s:%s%(reason._class_._name_,reason),Asser

    17、tionError:1 is not equal 2!,断言:示例2,例程中assert作用:调用函数使用的参数符合要求;不符合要求时:提示用户存在的问题。,def RecursiveSum(n):#precondition:n=0 assert(n=0)if n=0:return 0 return RecursiveSum(n-1)+n#postcondition:returned sum of 1 to ndef SumToN(n):if n=0:raise ValueError(N must be greater than or equal to 0)else:return Recurs

    18、iveSum(n),SumToN(10)55 SumToN(a)Traceback(most recent call last):File,line 1,in File,line 2,in SumToNTypeError:unorderable types:str()SumToN(-1)Traceback(most recent call last):File,line 1,in File,line 3,in SumToNValueError:N must be greater than or equal to 0,8.4.2上下文管理,使用with语句进行上下文管理With语句的语法with

    19、语句的作用解决tryfinally结构中的资源释放问题;提供了一种简单的方法。with语句的实现依赖于python语言的magic method,需要实现_enter_()和_exit_()两个方法:上下文管理协议;或者通过引用contextlib,并使用contextlib.contextmanager方式实现。,with context_expr as obj:with_block,obj=context_exprobj._enter_()try:with_blockfinally:obj._exit_(),with语句:示例1,这是一个实用Timer类,可以用来记录运行时间;可以对照上一

    20、页的内容理解本类的内容。,import timeclass Timer(object):def _init_(self):pass def _enter_(self):self.start=time.time()def _exit_(self,exception_type,exception_val,trace):print(elapsed:,time.time()-self.start)with Timer():i for i in range(10000),elapsed:1.7445049285888672,with语句:示例2,代码和前面(1)中的代码功能相同;通过使用contextl

    21、ib.contextmanager实现。,import contextlibimport timecontextlib.contextmanagerdef time_print(task_name):t=time.time()try:yield finally:print(task_name,took,time.time()-t,seconds.)with time_print(processes):i for i in range(10000),processes took 1.650709867477417 seconds.,with语句:示例3,文件读写下面的代码把文件myfile.tx

    22、t内容复制到myfile.txt-bk中;思考:代码是否足够简洁?,with open(sample.txt)as fr,open(sample.txt-bk,w)as fw:for line in fr:fw.write(line),8.5 用sys模块回溯最后的异常,发生异常时Python回溯异常,给出大量的提示;可用sys模块回溯最近一次的异常。,import systry:blockexcept:errors=sys.exc_info()print(errors),sys.exc_info()可以直接定位,def A():1/0def B():A()def C():B(),C()Traceback(most recent call last):File,line 1,in File,line 2,in C File,line 2,in B File,line 2,in AZeroDivisionError:division by zero,try:C()except:r=sys.exc_info()print(r)(,ZeroDivisionError(division by zero,),),


    注意事项

    本文(8+Python程序设计+异常处理结构与程序调试.pptx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开