python 之异常捕获及处理(try--except)
在python中,至少有两类错误,一种是程序语法错误,一种是程序异常。
所谓的语法错误是指你未按规定格式书写导致的错误,如:定义函数时,括号后面要紧跟英文冒号,若缺失则不能识别与运行,并抛出 SyntaxError: invalid syntax错误
def exceptions()
print("语法错误") "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
File "D:/demo/except_try.py", line 1
def exceptions()
^
SyntaxError: invalid syntax Process finished with exit code 1
而异常是指程序代码书写符合编码规范,并能够正常运行,但在运行时遇到错误并抛出,如:让两种不同类型进行运算,会抛出 TypeError
def add(x, y):
"""
字符拼接
:return:
"""
str1 = x + y
return str1 print(add(1, '3')) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
Traceback (most recent call last):
File "D:/demo/except_try.py", line 13, in <module>
print(add(1, '3'))
File "D:/demo/except_try.py", line 10, in add
str1 = x + y
TypeError: unsupported operand type(s) for +: 'int' and 'str' Process finished with exit code 1
python中的异常
请参考文档 https://docs.python.org/3/library/exceptions.html#bltin-exceptions
python中的异常捕获及处理
程序运行出错后将不再执行,若想程序忽略错误继续执行,则要进行异常的捕获处理操作,在python中用try ----- except语句进行异常的捕获处理
# try --- except 语法
try:
代码1
代码2
except <异常>:
代码1
代码2
作用解析:当try下面的代码发生异常时会进行匹配except 中的异常,若匹配上则执行except下面的语句,异常则处理完成;若未匹配上则程序终止并打印默认异常信息
当try下面的代码未发生异常时,不会匹配错误,程序正常往下执行。
用try --- except处理上个异常例子
1.捕获异常后不做任何处理
def add(x, y):
"""
字符拼接
:return:
"""
try:
str1 = x + y
return str1
except TypeError:
pass print(add(1, '3')) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
None Process finished with exit code 0
2.将捕获的异常打印处理
def add(x, y):
"""
字符拼接
:return:
"""
try:
str1 = x + y
return str1
except TypeError as e:
print('程序发生异常:%s' % e) print(add(1, '3')) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
程序发生异常:unsupported operand type(s) for +: 'int' and 'str'
None Process finished with exit code 0
3.有时可以预估会发生的错误类型,有时又会出现莫名奇妙的未在考虑范围类的错误,这时可以用捕获所有异常来处理(直接使用常见错误的基类Exception或不带任何异常)
def add(x, y):
"""
字符拼接
:return:
"""
try:
str1 = x + y
return str1
# except常见错误的基类Exception
except Exception as e:
print('程序发生某个不知道的异常:%s' % e) def zero(x, y):
"""
除法
:param x:
:param y:
:return:
"""
try:
return x/y
# except不带任何异常
except:
print("发生错误") print(add(1, '3'))
print(zero(1, 0)) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
程序发生某个不知道的异常:unsupported operand type(s) for +: 'int' and 'str'
None
发生错误
None Process finished with exit code 0
4.except后面带多个异常,只要发生了其中一个异常,则进行处理
def zero(x, y):
"""
除法
:param x:
:param y:
:return:
"""
try:
return x/y
# except带多个异常
except (TypeError, ValueError, ZeroDivisionError) as e:
print("发生异常%s:" % e) print(zero(1, 0)) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
发生异常division by zero:
None Process finished with exit code 0
5.使用多个except (如果多个 except 声明的异常类型都与实际相匹配,最先匹配到的 except 会被执行,其他则被忽略)
try:
a = 1/0 + data[2] print(a)
except TypeError as e:
print(e)
except NameError as e:
print(e)
except ZeroDivisionError as e:
print(e)
except Exception as e:
print(e) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
division by zero Process finished with exit code 0
注意:当使用多个except时,最后一个最好能捕获全部异常(except Exception)
try-----except -----else语句
try:
语句
except (异常):
语句
else:
语句
解析:当try中发生异常时,进行匹配except错误,匹配上后执行except下的语句,且程序不会终止,若未匹配上程序终止并抛出异常
当try中未发生异常时,则运行else下的语句
try:
a = 3
except ZeroDivisionError:
pass
else:
print("I like %s" % a) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
I like 3 Process finished with exit code 0
try----except ----finally语句
try:
语句
except (异常):
语句
finally:
语句
解析:不管try中有没有发生异常最后都会执行finally下面的语句,且不受return语句影响
# 无异常演示
def open_file(file):
try:
f = open(file, 'r')
except FileNotFoundError as e:
print("文件不存在:%s" % e)
except OSError as e:
print("OS错误{}".format(e))
except Exception as e:
print("未知错误:%s" % e)
finally:
print("正在关闭文件")
f.close()
open_file('D:/demo/except_try.py') "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
正在关闭文件 Process finished with exit code 0
# 异常演示
def open_file(file):
try:
f = open(file, 'r')
except FileNotFoundError as e:
print("文件不存在:%s" % e)
except OSError as e:
print("OS错误{}".format(e))
except Exception as e:
print("未知错误:%s" % e)
finally:
print("正在关闭文件")
f.close()
open_file('D:/demo/try.py') "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
文件不存在:[Errno 2] No such file or directory: 'D:/demo/try.py'
正在关闭文件
Traceback (most recent call last):
File "D:/demo/except_try.py", line 59, in <module>
open_file('D:/demo/try.py')
File "D:/demo/except_try.py", line 58, in open_file
f.close()
UnboundLocalError: local variable 'f' referenced before assignment Process finished with exit code 1
# 含return语句演示
def open_file(file):
try:
f = open(file, 'r')
except FileNotFoundError as e:
return "文件不存在:%s" % e
except OSError as e:
return "OS错误{}".format(e)
except Exception as e:
return "未知错误:%s" % e
finally:
print("正在关闭文件")
f.close()
print(open_file('423')) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
Traceback (most recent call last):
File "D:/demo/except_try.py", line 59, in <module>
print(open_file('423'))
File "D:/demo/except_try.py", line 58, in open_file
正在关闭文件
f.close()
UnboundLocalError: local variable 'f' referenced before assignment
python 之异常捕获及处理(try--except)的更多相关文章
- python异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-3
异常捕获 异常:程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表现出来 影响:整个程序无法再正常运行 异常的结构 异常的类型 NameError 异常的信息 ...
- 【python】-- try except (异常捕获)、断言
try except (异常捕获) 当程序出错了,但是我们又不想让用户看到这个错误,而且我在写程序的时候已经预料到了它可以出现这样的错误,出现这样的错误代表着什么,我们可以提前捕获这些个错误 1.异常 ...
- Python档案袋(异常与异常捕获 )
无异常捕获 程序遇到异常会中断 print( xxx ) print("---- 完 -----") 得到结果为: 有异常捕获 程序遇到异常会进入异常处理,并继续执行下面程序 tr ...
- python入门19 异常及异常处理 异常捕获
常见异常举例 """ 一些异常举例:""" '''模块不存在 ModuleNotFoundError: No module named 'd ...
- python 的异常及其处理
Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言 ...
- Python中异常(Exception)的总结
Python中的异常处理 异常处理的语句结构 try: <statements> #运行try语句块,并试图捕获异常 except <name1>: <statement ...
- Selenium基本使用(十一)异常捕获
1. 抛出异常和自定义异常 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种 ...
- 02 flask 请求钩子、异常捕获、上下文、Flask-Script 扩展、jinja2 模板引擎、csrf防范
一 请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个 ...
- Python标准异常和异常处理详解
python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 1.异常处理: 本站Python教程会具体介绍. 2.断言(Asserti ...
- Javascript的异常捕获机制
這個異常處理機制,之前也只是,但是沒有怎麼用過,用了一次后發現還可以, 和java,python的異常處理機制也很相似 Javascript的异常捕获机制 1.1 基本的try…catch语句 ES3 ...
随机推荐
- 工作7年收集到的git命令
概念 git 中的术语解释: 仓库也叫版本库(repository) stage:暂存区,add 后会存到暂存区,commit 后提交到版本库 git 安装 linux 下安装 git 第一种方法:y ...
- proxy解决跨域问题
首先我们在本地开发,域名都是localhost,当我们需要请求后台数据时,就会出现跨域的问题 下面就是在vue.config.js配置文件里: devServer: { proxy: { ...
- 3.ElasticSearch系列之Docker本地部署
对于之前的部署方式一般用于生产环境,而对于学习而言Docker方式快速部署就好了,本示例在window10环境下进行. 1. Docker使用Elasticsearch 需要对vm.max_map_c ...
- 3.MongoDB系列之查询
1. find简介 // 查询所有文档 db.users.find({}) // 查询指定条件文档 db.users.find({'name': 'shenjian'}) // 查询指定字段,1查询键 ...
- Ubuntu安装错误 server64 busybox-initramfs安装失败
因为想试试在Linux系统上爆破 所以安装了一下Ubuntu.第一次安装包报了个server64 busybox-initramfs.在安装系统那边.我一直还以为是我磁盘分配错了. 后来在网上找了资料 ...
- 京东云开发者|ElasticSearch降本增效常见的方法
Elasticsearch在db_ranking 的排名又(双叒叕)上升了一位,如图1-1所示;由此可见es在存储领域已经蔚然成风且占有非常重要的地位. 随着Elasticsearch越来越受欢迎,企 ...
- v-for中key的作用与原理
一.虚拟DOM中key的作用 key是虚拟DOM对象的标识,当数据发生变化时,Vue会根据新数据生成新的虚拟DOM,随后Vue会对新虚拟DOM与旧虚拟DOM的差异进行比较. 二.如何选择key 最好使 ...
- Jupyter基本使用
https://www.cnblogs.com/zhrb/p/12174167.html 用来取代Jupyter Notebook的一个基于Web的用户交互式用户界面.相当于增强版的Jupyter N ...
- JS数据结构与算法-概述
JS数据结构与算法概述 数据结构: 计算机存储, 组织数据的方式, 就像锅碗瓢盆 算法: 一系列解决问题的清晰指令, 就像食谱 两者关系: 程序 = 数据结构 + 算法 邂逅数据结构与算法 什么是数据 ...
- BERT模型源码解析
BERT模型源码解析 modeling.py 目录 属性 类 class BertConfig(object) BERT模型配置参数类 class BertModel(object) BERT ...