推荐一本用于修炼Python编程内功的好书《Python程序设计开发宝典》(本文封面图片),扫码了解详情(京东链接):

==============================

所谓异常,主要是指由于测试不充分导致在实际运行时遇到意料之外的错误而引发的代码崩溃。例如让用户输入两个数然后输出两个数的商,结果用户把除数输入为0。例如让用户输入文件名然后程序输出其中的内容,结果用户输入的文件名不存在。例如网络临时发生故障导致无法连接服务器。这样的情况如果得不到及时处理都会引发代码崩溃。

异常处理结构的思路是直接执行功能代码,提前预测可能遇到的问题并设计好处理方案,到时候根据遇到的实际情况采取相应的方式进行处理,属于事后诊断与处理手段,是比较常用的代码健壮性保证技术。但如果使用不好的话,反而会带来一些问题,本文简单讨论常见的坑。

1)对于可能遇到的错误预测不完整。例如下面的代码只考虑除数不能为0,漏掉了输入无法转换成实数的情况:

2)把太多代码放在try块中。这样做的话,会导致异常处理结构非常庞大,因为可能引发的异常种类太多,非常不利于代码的维护,也很难准确定位出错的代码。

3)异常捕捉不精准,真实错误被隐藏。作为一般建议,应使用except语句捕捉尽可能精准的异常类型,针对除零错误、文件不存在、类型错误等不同的异常类型进行不同的处理。例如,下面这样的异常处理结构是没有什么实际意义的,因为不带任何异常类的except语句可以捕捉任何异常,并且提示信息也无法提供足够准确的信息帮助定位和修改错误代码:

4)except子句顺序有问题。作为一般建议,应按照由细到粗的顺序,首先捕捉和处理精准的异常,把所有能想到的异常都处理完之后,为了防止发生没有考虑到异常,最后增加一个不带任何异常类型的except子句或者捕捉异常基类Exception的except子句,如果顺序写的不对则可能会导致无法精准处理特定类型的异常或者导致语法错误。如果不带任何异常类的except没有出现在异常处理机构的最后则会引发语法错误,比较容易发现,而一旦捕捉异常基类Exception的except子句没有出现在最后,这样的错误不容易发现,隐蔽性较强。例如:

5)以为使用了异常处理结构就万事大吉了。例如下面的代码,虽然使用了异常处理结构,也考虑到了所有可能发生的情况,但是没有进行正确的处理,只是简单地输出了提示信息,导致后面的功能代码无法正确执行:

对于这样的情况,建议把功能代码放到异常处理结构的else子句中,例如下面的写法:

6)在函数中使用异常处理机构的话,一定不要在finally子句中写return。在异常处理结构中,无论是否发生异常,也无论异常是否被正确捕捉和处理,最后总是要执行finally子句中的代码。如果在函数中异常处理结构的finally子句中return,会发生什么情况呢?

7)不要过于信任异常处理结构,异常处理结构中处理异常的代码也会引发异常,如果用法不对也一样无法避免代码崩溃。例如:

温馨提示

关注本公众号“Python小屋”,通过菜单“最新资源”==>“历史文章”可以快速查看分专题的800篇技术文章列表(可根据关键字在页面上搜索感兴趣的文章),通过“最新资源”==>“微课专区”可以免费观看300节Python微课,通过“最新资源”==>“培训动态”可以查看近期Python培训安排,通过“最新资源”==>“教学资源”可以查看Python教学资源。

--------董付国老师Python系列图书--------

1)《Python程序设计(第2版)》清华大学出版社

2)《Python可以这样学》清华大学出版社

3)《Python程序设计基础(第2版)》清华大学出版社

4)《中学生可以这样学Python》清华大学出版社,配套微课:《中学生可以这样学Python》84节微课免费观看地址

5)《Python程序设计开发宝典》清华大学出版社

6)《玩转Python轻松过二级》清华大学出版社

7)《Python程序设计基础与应用》机械工业出版社

8)《Python程序设计实验指导书》清华大学出版社

9)《Python编程基础与案例集锦(中学版)》电子工业出版社

《中学生可以这样学Python》84节微课免费观看地址

非计算机专业《Python程序设计基础》教学参考大纲

计算机相关专业“Python程序设计”教学大纲(参考)

《Python程序设计》实验指导书(30个实验)

《Python程序设计基础与应用》课后习题答案

Python课程期末考试编程题自动批卷原理与实现模板

“Python小屋”免费资源汇总(截至2018年11月28日)

Python课堂上我与学生斗智斗勇已8个学期

系列教学PPT:

1900页Python系列PPT分享一:基础知识(106页)

1900页Python系列PPT分享二:Python序列(列表、元组、字典、集合)(154页)

1900页Python系列PPT分享三:选择与循环结构语法及案例(96页)

1900页Python系列PPT分享四:字符串与正则表达式(109页)

1900页Python系列PPT分享五:函数设计与应用(134页)

1900页Python系列PPT分享六:面向对象程序设计(86页)

1900页Python系列PPT分享七:文件操作(132页)

1900页Python系列PPT分享八:异常处理结构与程序调试、测试(70页)

报告PPT(163页):基于Python语言的课程群建设探讨与实践

报告PPT(123页):Python编程基础精要

2000页Python系列PPT分享九:(GUI编程)(122页)

Python实验项目1例:使用进程池统计指定范围内素数的个数

(PPT)Python程序设计课程教学内容组织与教学方法实践

警惕Python编程中异常处理结构可能的坑相关推荐

  1. python random模块中的指令_10分钟让你掌握python编程中random模块功能使用,非常详细...

    原标题:10分钟让你掌握python编程中random模块功能使用,非常详细 python作为一门高级编程语言,它的定位是优雅.明确和简单.阅读Python编写的代码感觉像在阅读英语一样,这让使用者可 ...

  2. python编程中常用的12种基础知识总结

    python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

  3. python编程中的小问题汇总

    前言 本文记录了我在python编程中遇到的各种小问题,持续更新. 1. x = x + 1 VS x += 1 辨析下面这两段代码: >>> x = y = [1, 2, 3, 4 ...

  4. python的知识点运用_程序猿在Python编程中不得不使用的十二种基础知识

    Python编程中常用的12种基础知识,其中肯定有你不会的! 人生苦短,我用Python 1.正则表达式替换 目标: 将字符串line中的 overview.gif 替换成其他字符串. 人生苦短,我用 ...

  5. python编程中的运算_Python编程中的四大运算法则

    接触过编程的人都知道,编程中的数学知识无处不在,通过数学建模能够解决我们实际生活中的很多问题.当然这并不是说必须要成为一名数学大神才能学编程,但掌握数学知识在编程中的表达方法却是很有必要的,今天南京小 ...

  6. if __name__ == __main__:什么意思_秒懂Python编程中的if __name__ == 'main' 的作用和原理...

    来源:菜鸟分析 链接: https://zhuanlan.zhihu.com/p/34112508 一天偶然发现知乎上有篇关于对python编程中的if __name__ == 'main'的理解陈述 ...

  7. Python编程中一定要注意的那些“坑”(二)

    之前发过一些坑,请参考Python编程中一定要注意的那些"坑"(一)和Python函数默认值参数的2个坑 今天说说列表的内存自动伸缩带来的坑. 假设有个列表如下,现在下删除其中的所 ...

  8. python编程基础知识点总结_【转载】Python编程中常用的12种基础知识总结

    Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

  9. Python 编程中常用的12种基础知识总结

    Python 编程中常用的12 种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出 ...

最新文章

  1. 极限脱出 量子计算机,《极限脱出3:零时困境》50条指向zero身份线索
  2. 人脸识别被玩坏?别急,“护脸计划”即将开启
  3. 如何写出让 CPU 跑得更快的代码?
  4. 全面屏适配方案,终极版,华为隐藏导航栏解决方案
  5. Django 的JsonResponse 与json
  6. python限定方法参数类型、返回值类型、变量类型
  7. java bidi_Java Bidi createLineBidi()用法及代码示例
  8. python的随机种子实例
  9. Spring的XML解析原理,java软件开发面试常见问题
  10. python 开关_Python开关盒
  11. Hadoop 快速入门
  12. linux下连接mysql数据库命令,linux连接mysql命令
  13. 数字电路基础知识——数字逻辑代数(逻辑代数基本定理及常用公式,最大项、最小项,公式法、卡洛图法及Q-M法化简(列表法)化简逻辑函数)
  14. clickhouse ARRAY JOIN函数
  15. java中Joiner的使用笔记
  16. 前端页面性能优化的几种方式(强烈推荐)
  17. 大漠穷秋:如何快速构建一款SCRM小程序?
  18. 玲珑杯Unity开发心得——进度条界面(异步加载游戏场景)
  19. 【ChatBot开发笔记】聊天机器人准备工作——初识NLTK库、语料与词汇资源
  20. VBA小程序_遍历所有工作表_复制粘贴为数值

热门文章

  1. weblogic java vendor_配置jprofiler监控Weblogic-Zee
  2. java实验多线程机制_使用Java多线程的同步机制编写应用程序 PDF 下载
  3. eclipse maven配置_Gradle学习记录015 声明仓库,检查依赖,管理依赖的配置
  4. linux线程切换回调函数,linux C线程退出回调函数
  5. c语言射击类小游戏任务书,(c语言课程设计报告小游戏“石头剪子布”.doc
  6. linux禁止内核抢占,Linux内核态抢占机制分析
  7. js中while死循环语句_JavaScript循环 - while
  8. linux fstab 权限,linux中fstab文件配置简介
  9. VSFTPD 安装与配置
  10. WebLogic在Linux环境下安装