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 ...
随机推荐
- 努力一周,开源一个超好用的接口Mock工具——Msw-Tools
作为一名前端开发,是不是总有这样的体验:基础功能逻辑和页面UI开发很快速,本来可以提前完成,但是接口数据联调很费劲,耗时又耗力,有时为了保证进度还不得不加加班. 为了摆脱这种痛苦,经过一周的努力,从零 ...
- css 悬停图片改变图片的样式
<style> #div{ text-align: center; } .img{ width: 200px; clip-path: polygon(50% 0,100% 50%,50% ...
- Spring笔记四
Spring-04 1.Spring整合Junit ①导入依赖 <!-- junit --> <dependency> <groupId>junit</gro ...
- SSM框架整合图书管理项目
SSM框架整合 1.建立简单的maven项目 2.导入依赖 <?xml version="1.0" encoding="UTF-8"?> <p ...
- JavaScript基础&实战(4)js中的对象、函数、全局作用域和局部作用域
文章目录 1.对象的简介 2.对象的基本操作 2.1 代码 2.2 测试结果 3.属性和属性值 3.1 代码 3.2 测试结果 4.对象的方法 4.1 代码 4.2 测试结果 5.对象字面量 5.1 ...
- 齐博x1再来个抛砖引玉 内容页根据关键词调用相关内容 新功能哦!
昨天升级了一个隐藏的功能,今天就简单的做个说明怎么用,反正也不能浪费不是 那就用内容页面关键词读取相关内容为例吧. 前台是你模型中已经存在keywords字段 关键词支持 空格分割,号分割 那么就开 ...
- 动词时态=>3.现在时态和过去时态构成详解
现在时态构成详解 一般现在时态 最容易构成的时态,直接加动词原形(字典当中显示的词条)就可以 第三人称"单数"的话需要加s 这是最容易出错的时态:容易将 现在的时间,和一般的状态: ...
- Pytorch模型量化
在深度学习中,量化指的是使用更少的bit来存储原本以浮点数存储的tensor,以及使用更少的bit来完成原本以浮点数完成的计算.这么做的好处主要有如下几点: 更少的模型体积,接近4倍的减少: 可以更快 ...
- Java 动态代理原理图解 (附:2种实现方式详细对比)
动态代理在 Java 中有着广泛的应用,例如:Spring AOP 面向切面编程,Hibernate 数据查询.以及 RPC Dubbo 远程调用等,都有非常多的实际应用@mikechen 目录 ...
- Redis系列8:Bitmap实现亿万级数据计算
Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...