还剩4页未读,继续阅读
文本内容:
人工智能与大数据学院人程序设计教案thon31教学标题项目9异常处理任务3掌握异常处理的其他方法授课班级云计算2101课时2场地4406时间2022年6月14日星期二授课教师李力除了标准的异常处理语句,Python还支持许多和异常有关的主动性操作,包括主动触发异常、自定义异常、上下文管理、断言等,L项目/任务价值灵活运用这些功能,有利于开发人员更好地完成工作知识目标
1.
2.掌握raise语句
3.理解异常传递
4.掌握自定义异常处理的方法
5.了解异常继承树
6.掌握with语句
7.掌握assert语句
2.学习目标能力目标
1.掌握主动触发异常的方法教学设计
2.掌握在封装内建函数异常处理3理解上下文管理4能够向朔最近发生的异常思政-素质目标
1.让学生明白人无完人,但要在学习、生活和工人中不断完善自我,使自己更加健康、自由地生活、学习和工作;
2.错误不可避免,异常也就发生,正确面对,处理是当,会让事情会更好,也就有收获;
3.失败不可怕,看如何处理;
1.任务描述
3.学习内容
2.知识准备掌握异常处理的基本处理方法
3.任务实施对于一些特殊处理情况,如异常需要交给上层处理、自己按照业务需求定义异常、回溯错误等改如何处理?重庆在线开放课程平台《Python开发技术应用》,多媒体课件,理实一体化实训室,网络教学资源,www.pythontutor,com可视4,学习资源化工具、WWW.processon.com在线流程图绘制工具实物教材,软件工具包教学重点主动触发异常、自定义异常、断言教学难点异常传递、断言本课程学习到如今,已经了解了基本的异常处理方法学生已具备基本的异常处理能力,但是对于异常处理中的一些特殊业务需求学情分析如异常需要交给上层处理、自己按照业务需求定义异常、回溯错误等的处理方法尚未解除本次课程引入相关的内容教学方法训练与练习法;情境教学法教学模式采用线上线下混合教学模式介绍类和实例的语法规则、相关方法本次课教学流程回顾已学内容,回顾程序错误问题、分析程序出错原因和类型、python程序错误与异常的关系等引导学生思考异常传递的场景、教学策略根据就自身业务需求定义异常类型、回溯错误等业务场景的需求讲解相关的异常处理语法举例说明学生练习在练习中总结方法时间分教学环节学生、教师活动教学方法、手段及思政设计配课程导学本课程学习到如今,已经了解了基本的异常处理方法学生已具备基本的异思考异常传递的场景、根据就自身3常处理能力,但是对于异常处理中的一些特殊业务需求如异常需要交给上层处理、自己业务需求定义异常类型、回溯错多媒体演示信息调研讲授、按照业务需求定义异常、回溯错误等的处理方法尚未解除本次课程引入相关的内容误等业务场景的需求提出如何讨论、案例教学课前发布导学教学实施过程在程序中处理的问题单,线上线下结合,引导学习方式转变,培养自主学习能力小组协作、沟通、互助学习,培育团队合作意识,引导学生大胆表达引入项目学习任务和目标讲解异常传递的场景、根据就自多媒体演示2任务1其他和异常相关的特性身业务需求定义异常类型、回溯启发式教学错误等工作内容业务场景的需求,引导出小组讨论和讲解本次课所要讲解内容
1.主动触发异常raise语句
2.封装内建函数
3.自定义异常处理方法
4.上下文管理with语句
5.断言assert语句任务实施思考并答题多媒体演示启发式教学15步骤1主动触发异常什么时候开发人员需要主动用户可以主动触发异常,本质上就是手动创建一个异常对象,这需要使用关键字的抛出异常?思政设计程序错误难免,人raise,raise后面接异常类型名称,尽可能地使用具体的异常类型,而不是它们的父通常在异常未处理或者未处生又何尝不是如此?关键看类、祖先类理完成或者出现了解析器不能主如何对待错误,怎样处理不raise语句语法如下,触发异常的时候,可以提供一个字符串参数,它将作为异常的动发现的异常如自定义异常时断总结,不断提升和完善自详细信息我们需要主动抛出异常我raise TndexErrorTt is triggered by theuserTraccbackmost recentcall lastFile D\Rosourcc\Codc\项目9\tost.py,line1,in modulcraiseTndexError^Ttistriggered bythe userFndexErrorIt istriggeredbytheuser
6.回溯最近发生的异常捕捉到了异常,但是又想重新引发它传递异常,可以使用不带参数的raise语句请看下面的例子try tryrai selOError#引发异常except lOErrorprint*inner exception*raise#将异常抛给外层except lOError#接收到内层抛出的异常printOutter ExceptlO1#处理步骤2封装内建函数思考调用safe_open函数发生10多媒体演示15针对容易产生异常的函数,可以用try-except对其进行封装例如,我们已经知道异常回得到什么结果?启发式教学如何去捕获lOError异常,并处理它现在,你可以把这些功能和pen函数放在一起,成为一个安全的safe opcn函数像下面这样有了内建函数的安全版本,def safe_openfi1ename,mode=,r,你就可以直接调用它,不需要使用额外的异常处理语句了try fl=openfi1ename,mode思考为什么官方不在open函数except lOError,e内部进行异常处理?思考异常传printe递的意义else returnfl步骤3自定义异常当内建异常不能满足需求是,我多媒体演示自定义异常可以通过继承其它异常类来实现例如处理“HTTP404”错误的自定义们需要自定义异常启发式教学异常类class HttpErrorlOError#从lOError继承def init seif,value#实例化时需要一个参数self,value=valuedef_str_self returnrcprsclf.value#将sc1f.value转换成字符串try raiseHttpError404#引发异常except HttpErroras eprintNot Found.
1.e.value异常的继承树如下图:步骤4上下文管理器化多媒体演示15异常类的继承树BlockinglOErrorBascException上下文管理器,是一个包装其他代码的对象,用于处ChiIdProcessError启发式教学WindovsErrorWindows|Connect:onError理那些ConnectionAbortedError事先需要设置,事宜y/finally这iFileExistsErrorSysteroExit EnvirontwntErrorFileNotFoundError ConnectionRefusedError种模式KeyboardInterrupt ConnectionResetError后需要做清理工作的事务InterruptedErrorGGnaraerExitIs.Wirecton^tTorException例如,读写文件时,首先要使NotADirectoryError用pen函数打开文件,然后进行读写,最后关PermissionEiTor FloatingPointError闭文件对象最简陋的做法是这样的Ox^rflowErrorZoroDProcessLookupErrorivisionErrorTitn^outErrorStoplt^ration BuffErrorfile=open,7tmp/foo.txtM|StopAsyncIteration.St ArithaeticErrorAssertionErrordata=file.readO#假设这就是要做的全部工作andardError Uodu1eNotFoundErrorAttributeEirorf Warningi le.closeEOFErrorImportError UnboundLocalError这里有两个问题一是可能忘记关闭文件句柄;二是如果文件读取数据发生异常,不LookupError Ind«xErrorDeprecationlarning KoyError会进行PendingDeprecationWaming MetnoryError任何处理XotIiipleroentedErrorRuntirr^Warning XamcErrorRecursionErrorSyntaxWarningVserWaming现在给这些代码加上finally语句FutureWamingInportWaming ReferenceErrorEncodingwarningRuntia^Errorfile=open/tmp/foo.txtUnicod^WarningBytesWamingSyntaxErrorResourceWaming IndentationErrorSystemErrortry TypeErrorVnicodeDeccdeErrorUnicodeEncodeError data=file.readO#假设这就是要做的全部工作ValueError InicodeErrorInicodeTranslateErrorfinally file,close虽然这段代码运行良好,但是太冗长了如果使用with语句,则可以实现更优雅的语法,同时它也可以很好地处理上下文出现的异常with open,7tmp/foo.txtnas fldata二fl.read步骤5断言思考断言的使用场景是什么?多媒体演示启发式教学10断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况应使用断言检测程序中理论上不应该出现的情况,如果出现了,程序就assert可以用来做参数的检查,会终止防止出现bug,当出现问题时可以可以利用断言在程序中插入调试性语句,使用关键字assert实现,语法为根据消息快速定位至问题处,提assert expression高debug效率等价于if notexpression:raise AssertionError步骤6回溯异常多媒体演示启发式教学10sys模块中的exc_info函数可以提供最近一次异常的相关信息从sys.exc info得到的元组所包含的三个元素分别是exc_.type exc_value exctraceback追踪traceback对]1异常类的实例异常类exc_type异常类exc_value异常类的实例exc_traceback追踪traceback对象深化小组讨论多媒体演示讨论教学5启发性探讨>程序设计中为什么要引入异常处理机制?>异常传递的意义是什么?总结抢答3小组总结引导同学总结
1.主动触发异常raise语句互动教学
2.封装内建函数
3.自定义异常处理方法
4.上下文管理with语句
5.断言assert语句
6.回溯最近发生的异常学业评价小组评价和个人综合评价(课堂讨论的参与、是否认真笔记)2补充教学反思教学反思主要问题解决办法本次课的做得好的地方。