版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章异常处理和程序调试Chap2PythonBasicDepartmentofComputerScienceandTechnologyDepartmentofUniversityBasicComputerTeachingNanjingUniversity基本概念28.1异常处理3概念:异常是一个事件,一旦程序出现错误,该事件就会在程序执行过程中发生,从而影响程序的正常执行。C++、C#、Java、PHP等许多常见的程序设计语言都存在异常处理。作用:脚本发生异常时,我们需要捕获并处理它,从而增强程序的鲁棒性和健壮性。一般程序的错误类型:语法错误、运行错误、逻辑错误。Python异常类与自定义异常48.2查询Python异常类5Python异常类>>>dir(__builtins__)['ArithmeticError','AssertionError','AttributeError','BaseException','BlockingIOError','BrokenPipeError','BufferError','BytesWarning','ChildProcessError','ConnectionAbortedError','ConnectionError','ConnectionRefusedError',…Python异常类6异常名称描述异常名称描述Exception常规异常的基类TypeError对类型无效的操作AttributeError该对象无此属性ValueError传入参数无效IndexError序列中无该索引ZeroDivisionError除法或者求模运算第二个参数为0KeyError映射中无此键IOError输入\输出操作失败NameError未初始化\声明该对象LookupError无效数据查询的基类SyntaxErrorPython语法错误IndentationError缩进错误SyntaxWaring对可疑语法的警告TabErrorTab键与空格混用Python异常类7>>>2/0Traceback(mostrecentcalllast):File"<pyshell#1>",line1,in<module>2/0ZeroDivisionError:divisionbyzero>>>a/2Traceback(mostrecentcalllast):File"<pyshell#2>",line1,in<module>a/2NameError:name'a'isnotdefined“ZeroDivisionError”异常“NameError”异常为什么需要用户自定义异常?
针对不同的任务,仅使用python自带的异常类不能满足用户需求。一般,如何自定义异常?8用户自定义异常Classuser_defined(Exception):pass用户自定义异常9?#code8_1classstrlongError(Exception):def__init__(self,leng):self.leng=leng;def__str__(self):print("密码长度"+str(self.leng)+",超过了20!")defpassword_Test():password=input("请输入长度小于20的密码:")
检测输入的用户密码长度是否大于指定长度?如果大于,则引发用户自定义异常。#code8_1续iflen(password)>20:raisestrlongError(len(password))else:print(password)password_Test()
用户输入“sdefrgthyjukiloaqswdefrgthy”,程序运行结果如下:10请输入长度小于20的密码:sdefrgthyjukiloaqswdefrgthyTraceback(mostrecentcalllast):File"D:/Python教程/code_8/code8_1.py",line25,in<module>password_Test()File"D:/Python教程/code_8/code8_1.py",line21,inpassword_TestraisestrlongError(len(password))密码长度27,超过了20!strlongError:<unprintablestrlongErrorobject>用户自定义异常除法运算引发“ZeroDivisionError”异常11Python中的异常处理#code8_2num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)
实验结果:enterthefirstnumber:2enterthesecondnumber:0Traceback(mostrecentcalllast):File"D:\Python教程\code_8\code8_2.py",line3,in<module>print(num1/num2)ZeroDivisionError:divisionbyzeroPython中的异常处理try…except捕获“ZeroDivisionError”异常12#code8_3try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)exceptZeroDivisionError:print('thesecondnumbercannotbezero!')用户输入“2”与“0”,程序运行结果:enterthefirstnumber:2enterthesecondnumber:0thesecondnumbercannotbezero!Python中的异常处理except捕获“ZeroDivisionError”和“ValueError”异常13#code8_6try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)except(ValueError,ZeroDivisionError):print('inputerror!')用户输入“2”与“0”,程序运行结果:enterthefirstnumber:2enterthesecondnumber:0inputerror!Python中的异常处理except…as捕获多个异常14#code8_7try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)exceptExceptionaserr:print(err)print('somethingiswrong!')用户输入“2”与“0”,程序运行结果:enterthefirstnumber:2enterthesecondnumber:0divisionbyzerosomethingiswrong!as语句后可以给出提示信息!Python中的异常处理try…except…else捕获异常15#code8_8try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)exceptExceptionaserr:print(err)print('somethingiswrong!')else:print('youareright!')用户输入“2”与“4”,程序运行结果:enterthefirstnumber:2enterthesecondnumber:40.5youareright!与if…else语句一样,如果没有异常发生,则执行else子句。Python中的异常处理try…finally捕获异常
16#code8_9try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)exceptExceptionaserr:print(err)print('somethingiswrong!')else:print('youareright!')finally:print('theend!')用户输入“2”与“4”,程序运行结果:enterthefirstnumber:2enterthesecondnumber:40.5youareright!theend!不论程序是否出现异常,一些语句都必须要输出!Python中的异常处理17#code8_9try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)exceptExceptionaserr:print(err)print('somethingiswrong!')else:print('youareright!')finally:print('theend!')用户输入“2”与“a”,程序运行结果:enterthefirstnumber:2enterthesecondnumber:ainvalidliteralforint()withbase10:'a'somethingiswrong!theend!try…finally捕获异常
不论程序是否出现异常,一些语句都必须要输出!try…finally语句
捕获异常
Python中的异常处理18#code8_9try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)exceptExceptionaserr:print(err)print('somethingiswrong!')else:print('youareright!')finally:print('theend!')用户输入“2”与“a”,程序运行结果:enterthefirstnumber:2enterthesecondnumber:ainvalidliteralforint()withbase10:'a'somethingiswrong!theend!不论程序是否出现异常,一些语句都必须要输出!raise语句抛出异常Python中的异常处理19>>>raiseNameError('sorry,erroroccurs')Traceback(mostrecentcalllast):File"<pyshell#0>",line1,in<module>raiseNameError('sorry,erroroccurs')NameError:sorry,erroroccurs用户可以自定义触发异常的条件或者在任意时刻运用raise语句抛出异常。这里raiseNameError引发了异常,并添加错误信息“sorry,erroroccurs”。用户自定义异常20?#code8_10try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))ifnum2==0:raiseZeroDivisionErrorexceptZeroDivisionError:print('caughttheZeroDivisionError,thesecondnumbercannotbezero')
当除法运算除数为0时,如何捕获raise语句抛出的异常。
用户输入“2”与“a”,程序运行结果:enterthefirstnumber:1enterthesecondnumber:0caughttheZeroDivisionError,thesecondnumbercannotbezeroIDLE调试程序21程序实现过程中会出现各种bug,可能是语法方面的,也可能是逻辑方面的。如果出现逻辑错误,该如何检测?
当出现逻辑错误时,可以对程序进行单步调试,即通过观察程序的运行过程以及运行过程中变量(局部变量和全局变量)值的变化,可以快速找到引起运行结果异常的根本原因,从而解决逻辑错误。IDLE调试程序22#code8_11defbubble_sort(nums):n=len(nums)foriinrange(n-1):forjinrange(0,n-i-1):ifnums[j]>nums[j+1]:nums[j],nums[j+1]=nums[j+1],nums[j]冒泡法实现排序,如何用IDLE方式调试程序?#code8_11续returnnumsa=[1,9,2,6,8,4]print(bubble_sort(a))IDLE调试程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度绿色交通合伙清算合作协议3篇
- 二零二五年度全款购房合同:房地产项目投资并购及整合协议3篇
- 2025年度农业现代化贷款担保协议3篇
- 2025年度全新官方版二零二五年度离婚协议书与子女监护权协议3篇
- 二零二五年度知识产权侵权律师费协议3篇
- 二零二五年度农村土地占用与农村文化传承合同协议
- 2025年度航空航天公司干股分红与飞行器研发合作协议3篇
- 二零二五年度卫浴安装与智能家居系统集成与优化服务协议3篇
- 二零二五年度太阳能电池板加工服务合同3篇
- 二零二五年度物联网解决方案公司转让合同3篇
- 阜阳市重点中学2025届高考数学全真模拟密押卷含解析
- 房屋市政工程生产安全重大事故隐患判定标准(2024版)宣传海报
- 2024-2025学年统编版七年级语文上学期期末真题复习 专题01 古诗文名篇名句默写
- 2024-2030年中国企业大学建设行业转型升级模式及投资规划分析报告
- 医院培训课件:《病历书写基本规范(医疗核心制度)》
- 2024年“中银杯”安徽省职业院校技能大赛(高职组)花艺赛项竞赛规程
- 部队年度安全规划方案
- 2024-2025学年七年级上学期历史观点及论述题总结(统编版)
- 2024年市特殊教育学校工作总结范文(2篇)
- 【MOOC】创新思维与创业实验-东南大学 中国大学慕课MOOC答案
- 青岛大学《英语综合》2023-2024学年第一学期期末试卷
评论
0/150
提交评论