第七章 程序调试方法 异常 崩溃.

Slides:



Advertisements
Similar presentations
最大公因數與最小公倍數 吳嵐婷.  因數倍數消消樂  17 年蟬的秘密  最大公因數 ( 剪紙實例 )  利用標準分解式求最大公因數 ( 撲克牌活動 )  最大公因數應用問題  最小公倍數 ( 堆疊實例 )  最小公倍數應用問題 大綱.
Advertisements

1 程式語言 Visual Basic 循序結構、選擇結構 黃瀧輝 老師 Long Hwai,Huang.
港股通首单分拆合并业务技术培训. 恒发洋参 4 : 1 合并股份 根据恒发洋参控股有限公司(恒发洋参)之股份合并建议,每 4 股每股面值 港元之现有股份( “ 现有股份 ” )将合并为 1 股每股面值 港元之股份 (“ 合并股份 ”) 。合并股份的开始买卖日期预计为 2016.
第四章 类、对象和接口.
嬰幼兒健康評估.
董笑菊 电子信息与电气工程学院 计算机科学与工程系
广州宜家选址分析 0连锁 李若谷 陈玉风 黄小飞 蓝柔盈.
提高社会组织的自律能力 履行社会组织的社会责任
美国人最爱说的一个单词是“try”。成都有个年轻人在研制一种安装折翼的可飞行汽车,在国内无人理睬,被认为是异想天开,可美国的一个机构却邀请他去美国“try”,并为他提供条件。其实,在中国也有敢于“try”的人。开放特区是“try”,“一国两制”也是“try”,只有具有创新意识的科学构想付诸实践,才能真正推动人类的进步、社会的发展。
计算机编程导论 -Python语言 第5讲 图形编程 讲课教师:常姗
新建本科院校 应用型人才培养若干问题探析 张德江.
婴幼儿米粉 准妈妈适用新鲜活米.
一年級評估安排.
计算机与程序.
第4章 循环结构 程序设计2 本章主讲 赵家刚 计算机编程导论.
科技活动与学科融合 四师教研室---熊正超 2016年.
项目进度管理.
市级个人课题交流材料 《旋转》问题情境引入的效果对比 高淳县第一中学 孔小军.
权力的行使:需要监督 北京市京源学校 冯 悦.
第二章 JAVA语言基础.
 人体的营养.
三角形的邊角關係 大綱:三角形邊的不等關係 三角形邊角關係 樞紐定理 背景知識:不等式 顧震宇 台灣數位學習科技股份有限公司.
Python金融数据分析教程 解放你的python编程能力 第6关金融数据的统计分析 Python金融数据分析教程 1.
程式設計實作.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
Linked List Operations
ORACLE 第五讲 PL/SQL编程基础.
Python入门培训演示 系统测试部 叶华 文件级别:公开
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
Python ——谁说简洁就不能强大? Gingko Studio.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
第三章 流程控制與例外處理 資訊教育研究室 製作 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
算法设计与分析.
数据集合体.
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
异常及处理.
Java程序设计 第2章 基本数据类型及操作.
用Python建模与数据处理 俞熹 2017/1.
計數式重複敘述 for 迴圈 P
成都教学展示会跟踪事项讨论 课程建设: 人工智能通识课、Python 纳入课程开发资助申报指南,但所占比例不宜高。初级案例开发也将纳入。
Uliweb-快速易用的 Python Web Framework
SAS软件应用指南 第四章、第五章.
注意:教程中给出的所有示例代码请勿直接拷贝使用!会引起不必要的错误!
Ch04 VB.NET的流程控制 網頁程式設計.
Python Turtle 模組.
第5章 其他数据库对象.
特定消耗品說明 (指碳粉匣、墨水匣) 國立清華大學 保管組製作.
第二章 Java基本语法 讲师:复凡.
第二次课后作业 计算对象的实现—存储 请给出R语言和Python语言中哪些值是可存储值,哪些值是不可存储值?
第二章 Java语法基础.
3.3 用中规模集成电路设计其他的组合逻辑电路 返回 用数据选择器设计组合逻辑电路 用译码器设计组合逻辑电路
教育概論 答題要訣.
▲重合的概念 ▲對應頂點、對應邊、對應角 ▲全等的記法 ▲全等性質 ▲三角形全等性質
中国农业科学院博士后学术论坛 博士后基金申请的经验及体会 中国农业科学院生物技术研究所 秦 华 博士
2011/2013年度 六年級家長座談會 中學學位分配-升中選校
主題四: 教育發展與大學學群 報告人: 張明敏老師.
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
第二章 Java基本语法 讲师:复凡.
Ch07. 函式.
Java程序设计 第17章 异常和断言.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
动态扫描显示(实验四) 查询式键盘(实验五)
大数据应用人才培养系列教材 Python语言 刘 鹏 张 燕 总主编 李肖俊 主编 刘 河 钟 涛 副主编.
幻灯片的动画设置和播放 1.动作设置和超链接 2.动画方案与自定义动画 3.幻灯片切换效果设置 4.自定义放映与放映方式的设置
第2章 Java语言基础.
第二章 Java基础语法 北京传智播客教育
國立勤益科技大學 冷凍空調與能源系 實務專題成果展
Presentation transcript:

第七章 程序调试方法 异常 崩溃

学习目标 1 3 2 重点 了解 掌握 重点 了解 掌握 异常处理 异常的概念 崩溃信息 Try-except-finally 使用raise主动抛出异常 程序调试

7.1 7.2 7.3 章节框架 计算学生平均成绩 对学生成绩进行排名 实践技能训练 ☞点击查看本小节知识架构 ☞点击查看本小节知识架构

7.1 异常概述 【任务描述】: 实现一个计算学生平均成绩的程序,每一次录入成绩的人可能不同,所以为了避免粗心的同学将成绩录错而闹笑话,需要在程序中利用异常处理机制来处理出现的异常情况 。

7.1 异常 什么是异常?

异常概述 1、认识异常 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在python无法正常处理程序时就会发生一个异常 。 异常是python对象,表示一个错误。当python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

异常概述 【样例1】要求完成一个计算学生平均成绩的程序,有同学写了以下函数: def mean_points(score=[],names=[]): all_score=sum(score) mean_score=all_score/len(names) return mean_score score=[83,78,69,93,57] mean_score=mean_points(score) print(mean_score) 录入成绩的小明使用这个函数来计算学生平均成绩,总共有5名同学的成绩,分别是:张三、小明、李雷、韩梅梅、王美美,他们的成绩分别是:83、78、69、93、57。为何会出现异常呢?

异常概述 在python中类似的异常有很多,常见的有以下这些: NameError 2、常见的异常 在python中类似的异常有很多,常见的有以下这些: NameError 当程序尝试访问一个未声明的变量或函数时,会引发NameError异常。 【样例2】变量名输错时,在调用的时候会引发NameError异常。 score=80 print(socre)

异常概述 ZeroDivisionError 在计算过程中,当有除数为0的情况发生时,会引发ZeroDivisionError异常。 SyntaxError 当程序出现语法错误时,会引发SyntaxError异常。 list=[‘a’,’b’,’c’] for i in list print(i)

异常概述 IndexError 当使用序列中不存在的索引时,会引发此异常。 list=[‘a’,’b’,’c’] print(list[3])

异常概述 keyError 当使用字典中不存在的键时,会引发此异常。 dictionary=[‘name’:’zhangsan’] print(dictionary[‘age’])

异常处理 异常处理 异常处理就是异常预测,预先想好一些处理方法。若发生异常,程序会按照预定的处理方法对异常进行处理。 python提供的try-except语句和try-except-finally语句都非常方便地处理异常。 常见的异常名称: BaseException 所有异常错误 Exception 常规异常错误 ZeroDivisionError 除0异常错误 ValueError 值类型异常错误

异常处理 使用try-except处理异常 python提供的try-except语句进行异常的捕获和处理,把可能出现的异常代码放入try语句块中,并使用except语句来处理异常。 【语法】 Try: 语句块一 #检测语句一是否存在错误 except errorname1: 语句块二 #若语句块一触发此异常,运行语句块二 Except errorname2 as e: 语句块三 Except: 语句块四 Else: 语句块五

异常处理 【样例2】在样例1中,小明在使用mean_points函数计算同学的平均成绩时,因为粗心导致程序出现异常,现需改进mean_points函数,对粗心的工作做一下预防,也对可能发生异常的地方做一下补救,让程序不会因为一些粗心的异常导致崩溃。 def mean_points(score=[],names=[]): try: all_score=sum(score) mean_score=all_score/len(names) print('学生平均分是:%.2f'%(mean_score)) except ZeroDivisionError: print('出现了被除数为0的情况,很可能是没有添加学生名字列表') else: print('运行成功') score=[83,78,69,93,57] # names=['张三','小明','李雷','韩梅梅','王美美'] mean_points(score)

异常处理 【课堂练习】使用异常处理,避免程序运行出现崩溃,为样例3mean_points函数中添加功能,在输出的结果中可以显示每一位同学高于或低于平均分多少 分。

异常处理 使用try-except-finally进行异常处理 python提供的try-except-finally语句进行异常处理。 【语法】 try: 语句块一 #检测语句一是否存在错误 except 异常名称: 语句块二 #若语句块一存在错误,可捕获错误 finally: 语句块三 #无论是否存在错误,都会执行finally内代码

异常处理 【样例3】在课堂练习中的mean_points()函数中添加一个功能,要求无论输入什么内容,都能输出时间戳。 import datetime def mean_points(score=[],names=[]): try: all_score=sum(score) mean_score=all_score/len(names) print('学生平均分是:%.2f'%(mean_score)) for i in range(len(score)): print('%s比平均分高:%d'%(names[i],score[i]-mean_score)) except ZeroDivisionError: print('出现了被除数为0的情况,很可能是没有添加学生名字列表') except BaseException as e: print('出现了%s错误,请仔细检查'%e) finally: print('现在的时间是:%s'%(datetime.datetime.today())) score=[83,78,69,93,57] names=['张三','小明','李雷','韩梅梅'] mean_points(score,names) mean_points(score)

异常处理 使用raise抛出异常 Python中需要在程序中主动抛出异常,执行这种操作可以使用raise语句。一旦引发raise后面的异常,将终止程序运行。 【语法】 raise ErrorName # 抛出ErrorName异常 raise ErrorName() # 抛出ErrorName异常

异常处理 【样例4】需求1: 1、传入一个参数,判断是否为整型类型,如果不是,则抛出异常,终止程序。 2、判断是否大于等于5,如果小于 5,则抛出异常,终止程序。 def f1(num): if not isinstance(num,int): raise Exception('该参数不是整型类型') if num<5: raise Exception('该参数小于5') f1(4)

异常处理 【课堂练习】需求: 传入若干个参数,判断参数个数如果小于等于5,则抛出异常,终止程序。

异常处理 assert断言 指的是期望用户满足指定的条件。 【语法】 assert 逻辑表达式,data # data是可选

异常处理 【样例5】需求1: 1、传入一个参数,判断是否为整型类型,如果不是,则抛出异常,终止程序。 2、判断是否大于等于5,如果小于 5,则抛出异常,终止程序。 def f4(num): assert isinstance(num,int),"该参数不是整型类型" assert num>=5,'该参数小于5' f4(12)

异常处理 【课堂练习】需求: 用assert断言实现:传入若干个参数,判断参数个数如果小于等于5,则抛出异常,终止程序。

技能训练 设计一个小游戏“谁先走到17谁就赢”。规则如下: 有两位参赛者,参赛者每次可以选择走1步、2步、3步。 两位参赛者交替走,谁走的路程相加先等于17谁获胜。 如果一方超过了17则判断为输,另一方直接记得比赛。 要求在控制台交互,无论用户输入什么,程序都不能崩溃,并给出提示,引导用户输入正确的内容,例如:输入走几步的时候,如果没有输入1、2、3中的任意数字,需提示输入有误,请重新输入。

7.2 崩溃 【任务描述】: 小明想用冒泡排序算法对一个列表中的学生成绩进行排名,最终找出成绩最好的前三名进行奖励,但是小明在实现冒泡排序算法时遇到了困难,需要咱们帮忙帮他找出错误。

异常概述 1、认识崩溃 崩溃是调试异常的第一步,也是程序设计人员的基本功 。 崩溃是程序运行过程中出现异常而崩溃时,打印出来的异常位置和异常信息。 【样例6】小明所写的冒泡排序算法如下: def sort(ls): for i in range(len(ls)-1): for j in range(len(ls)-i): if ls[j]>ls[j+1]: ls[j],ls[j+1]=ls[j+1],ls[j] return ls points=[86,73,89,91,77,63,68,69,84,51] order_points=sort(points) print(order_points)

异常概述 2、利用pycharm 进行debug 主要介绍利用pycharm进行断点调试。 设置断点 进入调试模块界面(点击小蜘蛛按钮)。 常用快捷键 F7:按顺序逐行执行,如遇到函数,会进入到函数内,并在调试界面中显示运行该行代码后得到的变量信息。 F8:单步执行。如果遇到函数,不进入函数,直接外跳到下一行。 F9:运行下一个断点处,适合快速调试。 Shift+F8:跳出函数。

异常概述 【样例7】对样例6小明所写的冒泡排序算法如下调试排错: def sort(ls): for i in range(len(ls)-1): for j in range(len(ls)-i): if ls[j]>ls[j+1]: ls[j],ls[j+1]=ls[j+1],ls[j] return ls points=[86,73,89,91,77,63,68,69,84,51] order_points=sort(points) print(order_points) def sort(ls): for i in range(len(ls)-1): for j in range(len(ls)-i-1): if ls[j]>ls[j+1]: ls[j],ls[j+1]=ls[j+1],ls[j] return ls points=[86,73,89,91,77,63,68,69,84,51] order_points=sort(points) print(order_points)

课堂作业 找出下面的问题所在,并修改好: 下面这段代码是使用python实现将列表中的数与它相邻的数求均值并输出。例如:ls=[15,8,7,9,8] 输出结果为: [11.5,10,8,8,8.5] 可以看出,中间的数是与其左右两个数一起求均值,而第一个数和最后一个数则只与其相邻的一个数求均值。函数代码如下: def mid_mean(ls): new_list=[] for i in range(len(ls)): new_item=(ls[i-1]+ls[i]+ls[i+1])/3 new_list.append(new_item) return new_list ls=[15,8,7,9,8] mid_mean(ls)

本章小结 本章小结 本章首先讲解了异常和崩溃概念,然后讲解了异常处理、pycharm的debug调试等。通过本章的学习,读者应该能够熟练掌握异常以及调试。