文章目录

  • 你不可能总是对的
  • 常见的Python异常
    • AssertionError:断言语句(assert)失败
    • AttributeError:尝试访问未知的对象属性
    • IndexError:索引超出序列的范围
    • KeyError:字典查找一个不存在的关键字
    • NameError:尝试访问一个不存在的变量
    • OSError:操作系统产生的异常
    • SyntaxError:Python的语法错误
    • TypeError:不同类型间的无效操作
    • ZeroDivisionError:除数为零
  • try-except语句
    • 针对不同异常设置多个except
    • 对多个异常统一处理
    • 捕获所有异常
  • try-finally语句
  • raise语句
  • 丰富的else语句
  • 简洁的with语句

你不可能总是对的

我们是人,也会经常犯错,程序员也不例外,就算是经验丰富的码农,也不能保证写的代码百分之百没有任何问题。另外,作为一个合格的程序员,在编程时要意识到一点,那就是永远不要相信你的用户,所以要多方面考虑,这样写出来的程序才会更加安全稳定。

那么既然程序总会出问题,那我们就需要用适当的方法去解决问题。程序出现逻辑错误或者用户输入不合法都会引发异常,但这些异常并不是致命的,不会导致程序崩溃,可以利用Python提供的异常处理机制,在异常出现的时候及时捕获,并从内部自我消化掉

那么什么是异常呢?举个例子:

这里当然假设用户的输入是正确的,但是只要用户输入一个不存在的文件名,那么上面的代码是不堪一击的

上面的例子就抛出了一个FileNotFoundError异常,那么Python还可能抛出哪些异常呢,在下面给大家介绍一下常见的异常,这样以后遇到这样的异常时就不会感到陌生了。


常见的Python异常

AssertionError:断言语句(assert)失败

在以前的分支和循环章节中讲过断言语句(assert),当assert这个关键字后边的条件为假的时候,程序将终止并抛出AssertionError异常。assert语句一般是在测试程序的时候用于在代码中置入检查点:


AttributeError:尝试访问未知的对象属性

试图访问的对象属性不存在时抛出的异常:


IndexError:索引超出序列的范围

在使用序列的时候就常常会遇到IndexError异常,原因是索引超出序列范围的内容


KeyError:字典查找一个不存在的关键字

试图在字典中查找一个不存在的关键字时就会引发KeyError异常,因此建议使用dict.get()方法


NameError:尝试访问一个不存在的变量

尝试访问一个不存在的变量时,Python会抛出NameError异常:


OSError:操作系统产生的异常

OSError顾名思义就是操作系统产生的异常,像打开一个不存在的文件会引发FileNotFoundError,而这个FileNotFoundError就是OSError的子类。上面的例子已经演示过,这里就不再赘述了。


SyntaxError:Python的语法错误

如果遇到SyntaxError是Python的语法错误,这时Python的代码并不能继续执行,你应该找到并改正错误:


TypeError:不同类型间的无效操作

有些类型不同是不能相互进行计算的,否则会抛出TypeError异常:


ZeroDivisionError:除数为零

我们都知道除数不能为零,所以除以零就会引发ZeroDivisionError异常:


try-except语句

try-except语句格式如下:

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

try-except语句用于检测和处理异常,举个例子来说明这一切是如何工作的。

前面我们也介绍过,当要打开的文件不存在时,就会引发FileNotFoundError,显然用户的体验不好,因此我们可以这样修改:

其执行结果是:

上面的例子由于使用了大家习惯的语言来描述错误信息,用户体验会好很多。

但是从程序员的角度来看,导致OSError异常的原因有很多(例如FileNotFoundError、FileExistsError、PermissionError等),所以可能会更在意错误的具体内容,这里可以使用as把具体的错误消息打印出来


其执行结果为:


针对不同异常设置多个except

一个try语句可以和多个except语句搭配,分别对感兴趣的异常进行检测处理:


对多个异常统一处理

except后面还可以跟多个异常,然后对这些异常进行统一的处理:


捕获所有异常

如果你无法确定要对哪一类异常进行处理,只是希望在try语句块里一旦出现任何异常,可以给用户一个“看得懂”的提醒,那么可以这么做:


try-finally语句

看下面这个例子,如果"a.txt"确实存在,open()函数可以正常返回文件对象,但异常却发生在打开文件后的sum = 1 + ‘1’语句上,此时Python将直接跳到except语句,也就是说,文件打开了,但并没有执行关闭文件的命令:

为了实现这种“就算出现异常,但也不得不执行的收尾工作(比如在程序崩溃前保存用户文档)”,引入了finally来扩展try:

如果try语句块中没有出现任何运行时错误,会跳过except语句执行finally语句块的内容。
如果出现异常,则会先执行except语句块的内容再执行finally语句块的内容。
总之,finally语句块中的内容就是确保无论如何都将被执行的内容。


raise语句

有些读者可能会思考,我的代码能不能自己抛出一个异常呢?答案是可以的,你可以使用raise语句抛出一个异常

抛出的异常还可以带参数,表示异常的解释


丰富的else语句

对于绝大多数编程语言来说,else语句都只能跟if语句搭配,但是在Python里,else语句的功能更加丰富。在Python中,else语句不仅能跟if语句搭,跟循环语句(for语句或while语句)搭配,还能跟刚才所讲的异常处理进行搭配

1、典型的if-else语句

if 条件:
  条件为真执行
else:
  条件为假执行

2、else与for和while循环语句搭配

举个例子:

这段程序主要是求用户输入的数的最大约数,如果是素数的话会提醒这是一个素数。
使用暴力的方法一个个尝试(num%count==0),如果符合条件则打印出最大的约数,并break,同时不会执行else语句块的内容了。但如果一直没有遇到合适的条件,则会执行else语句块内容。

for语句的用法和while语句一样,这里便不再赘述了。

3、else语句与异常处理进行搭配

else语句还能和刚刚讲的异常处理进行搭配,只要try语句块里没有出现任何异常,那么就会执行else语句块里的内容。举个例子:


简洁的with语句

有些读者觉得打开文件又要关闭文件,还要关注异常处理有点麻烦,所以Python提供了一个with语句,利用这个语句抽象出文件操作中频繁使用的try/except/finally相关的细节,对文件操作使用with语句,将大大减少代码量。举个例子:

使用with语句,可以改成这样:

有了with语句,就再也不用担心忘记关闭文件了。

Python基础——异常处理相关推荐

  1. python基础-异常处理try-except

    Python目前(至少)有两种可区分的错误:语法错误和异常.异常是指在语法正确的情况下执行时引发的错误.有时候我们需要处理这些异常,就会用到try-except语句. try-except while ...

  2. python基础-三分钟搞定面试官爱问的【异常处理】

    python基础-异常处理 一.异常简介 1.异常 2.处理异常 二.异常传播 三.异常对象 四.自定义异常对象 一.异常简介 1.异常 程序在运行过程当中,不可避免的会出现一些错误,比如:使用了没有 ...

  3. 刻意练习:Python基础 -- Task08. 异常处理

    背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...

  4. python基础之异常处理

    python基础之异常处理 参考文章: (1)python基础之异常处理 (2)https://www.cnblogs.com/zhangyux/p/6108026.html (3)https://w ...

  5. Python基础:异常处理

    Python基础:异常处理 一,学习的内容 Python 异常处理 异常就是运行期检测到的错误.计算机语言针对可能出现的错误定义了异常类型,某种错误引发对应的异常时,异常处理程序将被启动,从而恢复程序 ...

  6. 数据分析与爬虫实战视频——学习笔记(一)(python基础、urllib、超时设置、自动模拟HTTP请求、异常处理、浏览器伪装、代理服务器、新闻爬虫、淘宝登陆和图片爬取)

    未经允许,请勿转载. 连载未完成状态 网址: [数据挖掘]2019年最新python3 数据分析与爬虫实战_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili ...

  7. Python基础入门:从变量到异常处理--阿里云天池

    文章目录 系列文章目录 文章目录 前言 一.python简介及环境搭建 1.简介 2.环境搭建 二.变量.运算符与数据类型 1.注释 2.运算符 3.变量和赋值 4.数据类型与转换 5.Print() ...

  8. Python基础学习笔记:异常处理与断言(assertions)的运用

    python 提供了两个重要的功能来处理 python 程序在运行中出现的异常和错误: 异常处理 断言(assertions) 1.异常处理 捕捉异常可以使用 try/except 语句. try/e ...

  9. Python 异常处理 Python 基础教程 try..except

    异常处理在之前的学习中我们一直没有接触过. 哦对,我们甚至还不知道怎么向程序输入一段字符串.那么我们在这里提供一个小例子. 在命令行中,我们输入 s = raw_input('Enter someth ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装Markdown编辑器Remarkble
  2. Excel VBA附合导线平差自动计算表
  3. iOS 状态栏的图标
  4. 信号与系统-2021年春季学期-考试信息
  5. 数据流小说带点h_H.264数据流格式
  6. boost::pointer_traits的用法实例
  7. What is the usage of Transfer field in Text determine procedure customizing
  8. [SDOI2008]SUE的小球
  9. Modelsim下载、注册与添加仿真库(LATTICE DIAMOND)
  10. 宾馆管理系统(做了ppt忘记发博客了)
  11. Android上Excel编辑器,Excel表格编辑app
  12. CF643D Bearish Fanpages
  13. 北航数理统计大作业_2019复旦大学大数据学院统计学硕总分411考研初试经验
  14. “最难就业季“中的大学生就业:本硕过半有着落 高职生成香饽饽
  15. 2022-2027年中国国际货物运输行业市场深度分析及投资战略规划报告
  16. 软件测试原书第二版(佩腾著)-学习笔记(一)
  17. OS Tools-GO富集分析工具的使用与解读详细教程
  18. 可用的 office2010下载
  19. 网阔MZ200A设备常见问题定位与解决
  20. 亿佰特串口服务器接入阿里云物模型使用教程

热门文章

  1. PHP排序和MYSQL排序
  2. php 实名验证失败,【微信开发】为什么TOKEN一直验证失败呢?
  3. 2004年我爱上了这些
  4. RMAN(Recovery Manager)架构
  5. 情感干货!和程序员(猿)谈恋爱,是一种什么体验呢?
  6. 使用javap指令解析Class文件
  7. 微信小程序同一界面两个版块的跳转
  8. 12月19日绝地求生服务器维护公告,绝地求生吃鸡停机维护更新公告内容汇总 绝地求生正式服12.18更新时间...
  9. MATLAB如何在同一窗口中显示两幅图片
  10. Java main方法