本期内容详解:
try语句:

try:  检测范围
except Exception[as reason]:  出现异常(Exception)后的处理代码 

try-finally语句:

try:  检测范围
except Exception[as reason]:  出现异常(Exception)后的处理代码
finally:  无论如何都会被执行的代码

raise语句:
raise 异常的名字

>>> raise ZeroDivisionError('除数为零的异常')
<span style="color:#ff0000;">Traceback (most recent call last):  File "<pyshell#0>", line 1, in <module>  raise ZeroDivisionError('除数为零的异常')
ZeroDivisionError: 除数为零的异常</span>
>>>  

典型课后题
我们使用什么方法来处理程序中出现的异常?`

答:使用 try……except 搭配来捕获处理程序中出现的异常。

try:检测范围来自:bbs.fishc.com
except Exception[as reason]:出现异常(Exception)后的处理代码

一个 try 语句可以和多个 except 语句搭配吗?为什么?

答:可以。因为 try 语句块中可能出现多类异常,利用多个 except 语句可以分别捕获并处理我们感兴趣的异常。

try:  sum = 1 + '1'  f = open('我是一个不存在的文档.txt')  print(f.read())  f.close()
except OSError as reason:  print('文件出错啦T_T\n错误原因是:' + str(reason))
except TypeError as reason:  print('类型出错啦T_T\n错误原因是:' + str(reason)) 

你知道如何统一处理多类异常吗?

答:在 except 后边使用小括号“()”把多个需要统一处理的异常括起来:

    try:  int('abc')  sum = 1 + '1'  f = open('我是一个不存在的文档.txt')  print(f.read())  f.close()  except (OSError, TypeError):  print('出错啦T_T\n错误原因是:' + str(reason))  

except 后边如果不带任何异常类,Python 会捕获所有(try 语句块内)的异常并统一处理,但小甲鱼却不建议这么做,你知道为什么吗?

答:因为它会隐藏所有程序员未想到并且未做好准备处理的错误,例如用户输入ctrl+c试图终止程序会被解释为KeyboardInterrupt异常。

如果异常发生在成功打开文件后,Python 跳到 except 语句执行,并没有执行关闭文件的命令(用户写入文件的数据就可能没有保存起来),因此我们需要确保无论如何(就算出了异常退出)文件也要被关闭,我们应该怎么做呢?

答:我们可以使用 finally 语句来实现,如果 try 语句块中没有出现任何运行时错误,会跳过 except 语句块执行 finally语句块的内容。

如果出现异常,则会先执行 except 语句块的内容再接着执行 finally 语句块的内容。总之,finally 语句块里的内容就是确保无论如何都将被执行的内容!

请恢复以下代码中马赛克挡住的内容,使得程序执行后可以按要求输出。
代码:

输出:

参考答案:

    try:  for i in range(3):  for j in range(3):  if i == 2:  raise KeyboardInterrupt  print(i, j)  except KeyboardInterrupt:  print('退出啦!')  

还记得我们第一个小游戏吗?只要用户输入非整型数据,程序立刻就会蹦出不和谐的异常信息然后崩溃。请使用刚学的异常处理方法修改以下程序,提高用户体验。)

答:这里对可能导致异常的 guess = int(temp) 进行监测

    import random  secret = random.randint(1,10)  print('------------------我爱鱼C工作室------------------')  temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")  try:      guess = int(temp)  except ValueError:  print('输入错误!')  guess = secret  while guess != secret:  temp = input("哎呀,猜错了,请重新输入吧:")  guess = int(temp)  if guess == secret:  print("我草,你是小甲鱼心里的蛔虫吗?!")  print("哼,猜中了也没有奖励!")  else:  if guess > secret:  print("哥,大了大了~~~")  else:  print("嘿,小了,小了~~~")  print("游戏结束,不玩啦^_^")  

input() 函数有可能产生两类异常:EOFError(文件末尾endoffile,当用户按下组合键 Ctrl+d 产生)和 KeyboardInterrupt(取消输入,当用户按下组合键 Ctrl+c 产生),再次修改上边代码,捕获处理 input() 的两类异常,提高用户体验。

    import random  secret = random.randint(1,10)  print('------------------我爱鱼C工作室------------------')  try:  temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")      guess = int(temp)  except (ValueError, EOFError, KeyboardInterrupt):  print('输入错误!')  guess = secret  while guess != secret:  temp = input("哎呀,猜错了,请重新输入吧:")  guess = int(temp)  if guess == secret:  print("我草,你是小甲鱼心里的蛔虫吗?!")  print("哼,猜中了也没有奖励!")  else:  if guess > secret:  print("哥,大了大了~~~")  else:  print("嘿,小了,小了~~~")  print("游戏结束,不玩啦^_^")  

尝试一个新的函数 int_input(),当用户输入整数的时候正常返回,否则提示出错并要求重新输入。
程序实现如图:

    def int_input(prompt=''):  while True:  try:  int(input(prompt))  break  except ValueError:  print('出错,您输入的不是整数!')  int_input('请输入一个整数:')  

把文件关闭放在 finally 语句块中执行还是会出现问题,像下边这个代码,当前文件夹中并不存在”My_File.txt”这个文件,那么程序执行起来会发生什么事情呢?你有办法解决这个问题吗?

    try:  f = open('My_File.txt') # 当前文件夹中并不存在"My_File.txt"这个文件T_T  print(f.read())  except OSError as reason:  print('出错啦:' + str(reason))  finally:  f.close()  

答:由于finally语句块里试图去关闭一个并没有成功打开的文件,因此会弹出错误内容如下:

    >>> 出错啦:[Errno 2] No such file or directory: 'My_File.txt'  Traceback (most recent call last):  File "C:\Users\FishC000\Desktop\test.py", line 7, in <module>  f.close()  NameError: name 'f' is not defined  

我们这么修正:

    try:  f = open('My_File.txt') # 当前文件夹中并不存在"My_File.txt"这个文件T_T  print(f.read())  except OSError as reason:  print('出错啦:' + str(reason))  finally:  if 'f' in locals(): # 如果文件对象变量存在当前局部变量符号表的话,说明打开成功  f.close()  

FishC笔记—33 讲 异常处理:你不可能总是对的2相关推荐

  1. FishC笔记—19 讲 函数:我的地盘听我的

    本期内容详解: 1.函数与过程:过程(procedure)是简单的,特殊且没有返回值的:函数(Function)有返回值 Python严格来说只有函数没有过程 2.局部变量:在局部生效如在函数中定义的 ...

  2. FishC笔记—06 讲:Pyhon 之常用操作符

    本期内容详解: 1. 算术运算符: 加(+),减(-),乘(*),除(/),幂运算(**),地板除(//) 1) /和//的区别 在 Python 中的除运算符与其它程序语言的不太一样,/表示真正的除 ...

  3. 【小甲鱼】python零基础入门学习笔记 03讲~43讲

    本篇基于[莫烦]python基础教程,属于查漏补缺 建议学习顺序 小甲鱼->莫烦numpy&pandas 目录 第003讲 插曲之变量和字符串 课堂笔记 变量 变量 需要注意的地方 字符 ...

  4. 【转】【C++学习笔记】C++异常处理

    转自:[C++学习笔记]C++异常处理!你绝对不能错过的干货! - 知乎 合理地使用C++异常处理,能够使我们写出来的程序更加稳定强健,不易崩溃.那么,应该如何使用C++异常处理呢?下面,我们就来向大 ...

  5. java技术教程视频_Spring开发视频教程高级篇+源码(400M)33讲

    Spring开发视频教程高级篇+源码(400M)33讲 01_全面阐释Spring及其各项功能.rar 02_搭建与测试Spring的开发环境.rar 03_编码剖析Spring管理Bean的原理.r ...

  6. 视觉SLAM十四讲学习笔记-第二讲-开发环境搭建

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 ​​​​​​​ lin ...

  7. 视觉SLAM十四讲学习笔记-第二讲-初识SLAM

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 "定位"和"建图",可以看成感知的"内外之分". ...

  8. Guava学习笔记:简化异常处理的Throwables类

    Guava学习笔记:简化异常处理的Throwables类 参考文章: (1)Guava学习笔记:简化异常处理的Throwables类 (2)https://www.cnblogs.com/peida/ ...

  9. 笔记33 笨办法学python练习40之二:类和对象

    笔记33 笨办法学python练习40之二:类和对象 类和模块差不多么?把这个练习继续往下做,看是否真有如此结果.刚刚对模块有了点感觉,加上这个类class也是要创建,但这个练习所创建的class M ...

  10. 从零开始学习VIO笔记 --- 第一讲:基础知识(四元数,李代数)

    从零开始学习VIO笔记 --- 第一讲:基础知识(四元数,李代数) 一. 向量的内积与外积 二. 旋转与平移 2.1 旋转表示 --- 旋转矩阵R 2.2 平移向量 2.3 变换矩阵T与齐次坐标 2. ...

最新文章

  1. IOS开发基础知识--碎片32
  2. mysql utc 下取得昨天的时间段。
  3. 【Linux】一步一步学Linux——mv命令(30)
  4. DotNetCommon-搜集.neter开发常用的功能
  5. 瑶光TechTalk | 迈向多维智慧,智能画像与预测算法剖析
  6. 电脑常用音频剪辑软件_5款好用的音频剪辑软件推荐
  7. 卷积神经网络在tenserflow的实现
  8. 21幅非常有创意的倒影摄影作品欣赏
  9. 腾讯全球首款JS代码坦克 CodeTank
  10. 2022-01-18国产Linux深度操作系统deepin20.4发布,涉及桌面和内核升级。
  11. 亿晟科技人脸识别门禁系统方案整体解决办法
  12. Airbnb短租分析
  13. “万金油”的String,为什么不好用了?
  14. 青少年CTF Misc-Easy 女神的朋友圈 WP
  15. agc38C LCMs
  16. 简述SSH框架和SSM框架的区别
  17. CASIA-FaceV5亚洲人脸数据集以及对应的测试pairs文件
  18. C - Anu Has a Function
  19. 数学2600年,欧拉凭什么能当上“大王”?
  20. 15款音视频开发工具,拒绝加班熬夜

热门文章

  1. 换IP软件用户如何选择?
  2. python数据分析和数据可视化总结
  3. 常用地理信息数据下载平台
  4. Object-C 函数参数语法
  5. 单片机毕业设计196例
  6. 关于COM类工厂80070005和8000401a错误分析及解决办法
  7. 从零开始入门芯片行业
  8. 单片机:LCD1602
  9. php和apache配置 LoadModule php5_module D:/php/php5apache2.dll
  10. 大学计算机基础试题第一套,大学计算机基础试题及答案(完整版)