Python学习笔记 - day8 - 异常
异常
在程序运行过程中,总会遇到各种各样的错误。有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,有的错误是用户输入造成的,比如让用户输入email地址,结果得到一个空字符串,这种错误可以通过检查用户输入来做相应的处理。还有一类错误是完全无法在程序运行过程中预测的,比如写入文件的时候,磁盘满了,写不进去了,或者从网络抓取数据,网络突然断掉了。这类错误也称为异常,在程序中通常是必须处理的,否则,程序会因为各种问题终止并退出。
Python的异常处理
Python内置了一套异常处理机制,来帮助我们进行错误处理。其基本格式如下:
try:
代码段1 # 正常执行的代码段
except:
代码段2 # 捕捉到异常后执行的代码段
else:
代码段3 # 没有异常要执行的代码段,else语句非必须
finally:
代码段4 # 不管有没有异常,都要执行的代码段,finally语句非必须
except的扩展格式:
- except: 表示遇到异常就捕捉。
- except Exception: 表示只捕捉Exception类的异常,而Exception类包含了Python内置的所有异常,所以功能类似于捕捉所有。其他Python内置的错误类型还有很多。
- except Exception as e: 捕捉并存储异常。
try:
a=[1,2,3]
a[4]
except Exception as e:
print('一切正常',e)
else:
print('真的是一切正常')
finally:
print('我是 finally')
解读:
由于列表a只有3个元素,取列表第四个元素,会报异常(IndexError: list index out of range,从pycharm的console窗口就能看到),异常被except捕捉,所以会打印,一切正常,并打印错误信息。由于产生了异常不会执行else语句,最后执行finally语句。
Python的内置异常类
Python 中内置了非常多的异常,常用的如下:
AttributeError # 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError # 输入/输出异常;基本上是无法打开文件
ImportError # 无法引入模块或包;基本上是路径问题或名称错误
IndentationError # 语法错误(的子类) ;代码没有正确对齐
IndexError # 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError # 试图访问字典里不存在的键
KeyboardInterrupt # Ctrl+C被按下
NameError # 使用一个还未被赋予对象的变量
TypeError # 传入对象类型与要求的不符合
UnboundLocalError # 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError # 传入一个调用者不期望的值,即使值的类型是正确的
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError
更多异常
异常的处理方式
由于程序是由每个程序员编写的,所以处理的方式可能都不同。一个健壮的Python程序是必须要有异常处理的。
关于异常的捕获,我们其实可以分错误进行捕获
try:
a = [1,2,3,4]
a[7]
except IndexError as e:
print('索引错误',e)
except KeyError as e:
print('key错误',e )
注意:
- 多条except语句,优先级为从上到下,和if条件的优先级是相同的,既如果捕获到一个,就不继续执行except语句了。
- 我们可以利用多except语句,来对不同的错误进行异常处理,使我们的程序更健壮。
raise关键字
很多时候,我们需要主动的触发异常,比如有一个函数,期待用户输入的是数字,而他输入的是字符串,当然我们可以对用户输入数据进行规范,而raise也是一种方法。再比如内置的异常没有适合使用的,这时我们自定义异常,可以使用raise来主动触发自定义异常。
class MyException(Exception): # 注意需要继承Exception类
def __init__(self,message):
self.message = message
def __str__(self):
return self.message
raise MyException('自定义错误')
这里__str__属性是: 当我们打印一个类的实例化对象时,输出的就是__str__的返回值。
Python学习笔记 - day8 - 异常的更多相关文章
- python学习笔记5_异常
python学习笔记5_异常 1.什么事异常 Python使用异常对象(exception object) 来表示异常情况.遇到错误会发生异常. 如果异常对象未被处理或被捕捉,程序就会用所谓的回溯(t ...
- Python学习笔记006_异常_else_with
>>> # try-except语句 >>> >>> # try : >>> # 检测范围 >>> # exc ...
- 【目录】Python学习笔记
目录:Python学习笔记 目标:坚持每天学习,每周一篇博文 1. Python学习笔记 - day1 - 概述及安装 2.Python学习笔记 - day2 - PyCharm的基本使用 3.Pyt ...
- 【python学习笔记】8.异常
[python学习笔记]8.异常 raise Exception: 抛出指定异常 try/except: 捕捉异常 except: 第一个参数是需要捕获的异常类型,可以是多个类型组成元组,第二个参数是 ...
- python学习笔记(六)文件夹遍历,异常处理
python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...
- 【Python学习笔记之二】浅谈Python的yield用法
在上篇[Python学习笔记之一]Python关键字及其总结中我提到了yield,本篇文章我将会重点说明yield的用法 在介绍yield前有必要先说明下Python中的迭代器(iterator)和生 ...
- 雨痕 的《Python学习笔记》--附脑图(转)
原文:http://www.pythoner.com/148.html 近日,在某微博上看到有人推荐了 雨痕 的<Python学习笔记>,从github上下载下来看了下,确实很不错. 注意 ...
- Python学习笔记之生成器、迭代器和装饰器
这篇文章主要介绍 Python 中几个常用的高级特性,用好这几个特性可以让自己的代码更加 Pythonnic 哦 1.生成器 什么是生成器呢?简单来说,在 Python 中一边循环一边计算的机制称为 ...
- Python学习笔记之文件处理
1.打开和关闭 要打开文件可以使用函数 open(),它位于自动导入模块 io 中.函数将文件名作为唯一不可缺少的函数,并返回一个文件对象.它还有一个名叫 mode 的参数,用于指定文件模式,其可取值 ...
随机推荐
- 利用 Pandoc 将 Markdown 生成 Word/PDF 文件
Pandoc 是一个格式转化工具,可以用于各(luan)种(qi)各(ba)样(zao)的文件转换, 反正我是认不全官网上的那个图(傲娇脸), 之前一直使用它将 Markdown 文件转换成 Html ...
- linux svn apache
借助apache运行的svn服务器 一:安装Apache HTTP Server 1.安装Apache HTTP Server yum install httpd httpd-devel -y 2.修 ...
- RT-thread内核之IO设备管理系统
RT-Thread系统的IO设备管理模块为上层应用提供了一个对设备进行访问的通用抽象接口,而对于下层设备来说则提供了底层设备驱动框架,并通过定义的数据结构对设备信息和底层设备驱动进行管理.从系统整体位 ...
- 前端基础:CSS属性操作
CSS属性操作 1.文本 文本颜色:color,颜色属性被用来设置文字的颜色,颜色是通过CSS经常指定的,其格式有: 1.十六进制:#FF0000: 2.RGB值:RGB(255,0,0): 3.颜色 ...
- HTML5 不再支持哪些元素
HTML5中已经不支持以下的元素,不建议在进行开发时再使用以下的元素. 1.acronym(建议abbr):定义首字母缩写 2.applet(建议object):定义applet 3.basefont ...
- NOIP1998 提高组
[NOIP2002] 提高组 T2.联接数 算法:贪心+字符串处理 [问题分析]: 按整数对应的字符串大到小连接,因为题目的例子都符合,但是不难找到反例:12 121 应该组成12121而非121 ...
- [洛谷P2161][SHOI2009]会场预约
题目大意:有两种操作: $A\;l\;r:$表示加入区间$[l,r]$,并把与之冲突的区间删除,输出删除的区间的个数,区间$A$于区间$B$冲突当且仅当$A\cap B\not=\varnothing ...
- BZOJ2705:[SDOI2012]Longge的问题——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2705 Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在 ...
- CF633C:Spy Syndrome 2——题解
https://vjudge.net/problem/CodeForces-633C http://codeforces.com/problemset/problem/633/C 点击这里看巨佬题解 ...
- BZOJ2924 [Poi1998]Flat broken lines 【Dilworth定理 + 树状数组】
题目链接 BZOJ2924 题解 题面有误..是\(45°\) 如果两个点间连线与\(x\)轴夹角在\(45°\)以内,那么它们之间连边 求最小路径覆盖 = 最长反链 由于\(45°\)比较难搞,我们 ...