python 笔记 异常处理
1 try-except
比如我们要打开一个不存在的文件,它会报错
f=open('no.txt','r')
f.read()'''
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-54-2709fabe0da7> in <module>
----> 1 f=open('no.txt','r')2 f.read()FileNotFoundError: [Errno 2] No such file or directory: 'no.txt'
'''
我们可以用try-except 实现
try:f=open('no.txt','r')print(f.read())
except FileNotFoundError as e:print(e)f=open('no.txt','w')f.write('new file')f.close()'''
[Errno 2] No such file or directory: 'no.txt'
'''
但是如果我们except里面使用了不匹配的error 还是会报错
try:f=open('no1.txt','r')print(f.read())
except KeyError as e:print(e)f=open('no1.txt','w')f.write('new file')f.close()'''
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-56-5e0e21b6da44> in <module>1 try:
----> 2 f=open('no1.txt','r')3 print(f.read())4 except KeyError as e:5 print(e)FileNotFoundError: [Errno 2] No such file or directory: 'no1.txt'
'''
解决方法是使用基类Error
try:f=open('no1.txt','r')print(f.read())
except BaseException as e:print(e)f=open('no1.txt','w')f.write('new file')f.close()
2 多except异常处理
d = {"name": "f1", "age": 2}
l = [1,2,3]try:v = d["gender"]l[3] = 4
except KeyError as e:print("key error for:", e)d["gender"] = "x"
except IndexError as e:print("index error for:", e)l.append(4)
print(d)
print(l)'''
key error for: 'gender'
{'name': 'f1', 'age': 2, 'gender': 'x'}
[1, 2, 3]
'''
但是此时有一点需要注意:它不会同时处理字典的 KeyError
和列表的 IndexError
因为在程序顺序执行的时候,只要是报错了, 那么就会终止错误之后的代码,进入错误 回收 环节。这个回收环节在上面的案例中也就是 except
的错误处理环节。
换句话说,except语句只能执行一个。
所以上述例子中,列表l并没有被append
3 try-except-else 语句
try-except和前面的一样,在 else
中处理没有报错的情况。
l = [1,2,3]
try:l[3] = 4
except IndexError as e:print(e)
else:print("no error, now in else")print(l)
'''
list assignment index out of range
'''
#此时是有异常的,所以执行的是except里面的语句l = [1,2,3,-4]
try:l[3] = 4
except IndexError as e:print(e)
else:print("no error, now in else")print(l)
'''
no error, now in else
[1, 2, 3, 4]
'''
#此时没有异常,所以执行的是try和else里面的语句
4 try-except-finally 语句
try-except和前面的一样,finally中的语句,不管有没有异常,都会执行
在有些情况下,加不加finally,好像没啥区别
没有异常:
l = [1,2,3,-1] try:l[3] = 4 except IndexError as e:print(e) finally:print("reach finally") ''' reach finally '''
l = [1,2,3,-1] try:l[3] = 4 except IndexError as e:print(e)print("reach finally") ''' reach finally '''
有异常:
l = [1,2,3] try:l[3] = 4 except IndexError as e:print(e)print("reach finally") ''' list assignment index out of range reach finally '''
l = [1,2,3] try:l[3] = 4 except IndexError as e:print(e) finally:print("reach finally") ''' list assignment index out of range reach finally '''
所以,finally语句什么使用需要用到呢?
我们看下面这个例子:
l = [1,2,3] try:l[3] = 4print("reach finally") '''File "<ipython-input-71-5a32d8788477>", line 6print("reach finally")^ SyntaxError: invalid syntax '''l = [1,2,3] try:l[3] = 4 finally:print("reach finally") ''' reach finally --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-75-26ba6fe359fd> in <module>1 l = [1,2,3]2 try: ----> 3 l[3] = 44 finally:5 print("reach finally")IndexError: list assignment index out of range '''
虽然都是报错,但是加了finally之后,就是先执行完finally中的语句,再报错
5 raise
手动触发异常
def no_negative(num):if num < 0:raise ValueError("I said no negative")return numprint(no_negative(-1))'''
Traceback (most recent call last):File "/lib/python3.8/asyncio/futures.py", line 178, in resultraise self._exceptionFile "/lib/python3.8/asyncio/tasks.py", line 280, in __stepresult = coro.send(None)File "/lib/python3.8/site-packages/pyodide/_base.py", line 419, in eval_code_asyncreturn await CodeRunner(File "/lib/python3.8/site-packages/pyodide/_base.py", line 276, in run_asyncres = eval(last_expr, self.globals, self.locals)File "<exec>", line 6, in <module>File "<exec>", line 3, in no_negative
ValueError: I said no negative
'''
注:这里raise 后面的error类型,必须是python 中定义的异常错误类型名称(见第6小节)
6 python 异常错误名称表
异常名称 | 描述 |
---|---|
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
StopIteration | 迭代器没有更多的值 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentError | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
OSError | 操作系统错误 |
WindowsError | 系统调用失败 |
ImportError | 导入模块/对象失败 |
LookupError | 无效数据查询的基类 |
IndexError | 序列中没有此索引(index) |
KeyError | 映射中没有这个键 |
MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
NameError | 未声明/初始化对象 (没有属性) |
UnboundLocalError | 访问未初始化的本地变量 |
ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotImplementedError | 尚未实现的方法 |
SyntaxError | Python 语法错误 |
IndentationError | 缩进错误 |
TabError | Tab 和空格混用 |
SystemError | 一般的解释器系统错误 |
TypeError | 对类型无效的操作 |
ValueError | 传入无效的参数 |
UnicodeError | Unicode 相关的错误 |
UnicodeDecodeError | Unicode 解码时的错误 |
UnicodeEncodeError | Unicode 编码时错误 |
UnicodeTranslateError | Unicode 转换时错误 |
Warning | 警告的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
FutureWarning | 关于构造将来语义会有改变的警告 |
OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning | 关于特性将会被废弃的警告 |
RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning | 可疑的语法的警告 |
UserWarning | 用户代码生成的警告 |
参考内容:如何控制异常 try-except - 交互式学Python | 莫烦Python (mofanpy.com)
python 笔记 异常处理相关推荐
- python笔记: 生成器
元素按照某种算法推算出来,我们在循环的过程中不断推算出后续的元素 不必创建完整的list,从而节省了大量的空间 这种一边循环一遍计算的机制,称之为生成器generator 1 列表生成器 把列表生成式 ...
- 简单介绍Python中异常处理用法
这篇文章主要给大家分享的是 Python中异常处理用法,为了保证程序的健壮性与容错性,即在遇到错误时候程序不会崩溃,我们需要对异常进行处理,下面来看看文章对此的用法,需要的朋友可以参考一下 为了保证程 ...
- python 多进程异常处理
前言 最近项目用到了Python作为网站的前端,使用的框架是基于线程池的Cherrypy,但是前端依然有一些比较'重'的模块.由于python的多线程无法很好的利用多核的性质,所以觉得把这些比较'重' ...
- tkinter 笔记: radiobutton 选择按钮(莫烦python笔记)
1 主体框架还是那个主体框架 window = tk.Tk() window.title('my window') window.geometry('500x500') 2 设置tkinter的文字变 ...
- tkinter 笔记:列表部件 listbox (莫烦python 笔记)
1 主体框架 主体框架部分还是 import tkinter as tkwindow = tk.Tk() #创建窗口window.title('my window') #窗口标题window.geo ...
- Python 多进程异常处理的方法,你会吗
最近项目用到了Python作为网站的前端,使用的框架是基于线程池的Cherrypy,但是前端依然有一些比较'重'的模块.由于python的多线程无法很好的利用多核的性质,所以觉得把这些比较'重'的功能 ...
- python输出字体的大小_Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格
Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格 Python 需要创建和读取excel表里面的数据,需要用 openpyxl 这个包,今天安装好备用. 首先,进入C命令窗口 ...
- c++ 冒泡排序_干货|python笔记1-冒泡排序
面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信可以难倒一批的同学,本篇就详细讲解如何用python进行冒泡排序. 基本原理 01概念: 冒泡排序是一种交换排序,它的基本思想是:两两比较相邻 ...
- python笔记-1(import导入、time/datetime/random/os/sys模块)
python笔记-6(import导入.time/datetime/random/os/sys模块) 一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其它内 ...
最新文章
- android Spinner 例子
- 通过Clocking Wizard定制和生成一个IP核(MMCM)(Virtex7)(ISE版)
- linux 音频路径,Linux系统中提取DVD音频的方法介绍(转)
- 微控制器和微处理器的区别
- oracle sql删除重复,【转帖】SQL Oracle删除重复记录
- 双缝干涉试验为什么恐怖?
- cudaMemcpyToSymbol使用
- 使用常识 | 如何在word中添加勾选框
- 老化试验机ami怎么寻找过去的数据_广东元耀:您知道塑料臭氧老化试验机检测浓度的方法有哪些吗?...
- 对中职计算机教学的思考,中职计算机教学思考
- Java 笔试题---Java与编程模式--7月6日
- Python实现爬取豆瓣电影|python豆瓣全栈爬虫:电影系列全爬虫系统1.0:(信息,短评,影评,海报)|你想爬的都有
- Lourakis/ Levenberg-Marquardt nonlinear least squares algorithms in C/C++
- RecyclerView Widget 使用
- 微信商城小程序怎么弄?怎么做微信商城小程序?
- 无源晶振有方向吗?无源贴片晶振贴反会怎样?
- 高级语言 和 低级语言 的区别
- 【 MATLAB 】mod 函数介绍
- 网页颜色搭配,网站设计,Google logo配色 Google官方配色表
- CPAN下载安装pm包方法
热门文章
- 原创 深度 技术:WatchStor焦点周刊创刊号
- Spring基于 Annotation 的简单介绍
- JavaScript 易错知识点整理
- CSS命名方法(笔记)
- Android app项目开发步骤总结
- 【CSON原创】HTML5游戏框架cnGameJS开发实录(精灵对象篇)
- [转载]2000/XP下删除隐藏旧网卡方法
- PAT甲级1062 Talent and Virtue:[C++题解]结构体、哈希表
- PAT甲级1139 First Contact (30 分):[C++题解] 图论、暴力枚举两个点、hash映射
- linux nginx漏洞修复,nginx-1.14.1 和 nginx-1.15.6 发布,修复HTTP/2和MP4模块中的漏洞