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 ...
随机推荐
- c#-03关于类和继承的基本知识
一.类继承 通过类继承可以定义一个新类,新类纳入一个已经声明的类进行扩展 已经存在的类叫做基类,而通过继承出的类叫做派生类,派生类的组成为: 本身声明中的成员 基类的成员 派生类无法删除基类成员,但可 ...
- 原生js的懒人轮播图
<style> body{ margin: 0; padding: 0px;}#carousel{ margin: auto; /* 居中 */ width: 600px; /* 设置宽度 ...
- 关于aws cli命令的exit/return code分析
最近总是收到一个备份脚本的失败邮件,脚本是之前同事写的,没有加入任何有调试信息,及有用的日志 于是去分析 ,脚本中有一条 aws s3 sync $srclocal $dsts3 命令,然后根据这条 ...
- C++面向对象编程之复合、委托和继承
1.复合,表示has a template <typename T> calss A{ protected: B<T> c; } 这里表示 A 里面有一个 B,A 可以调用 B ...
- 不安装运行时运行 .NET 程序 - NativeAOT
大家好,先祝大家国庆快乐.不过大家看到这篇文章的时候估计已经过完国庆了 . 上一篇我们写了如何通过 SelfContained 模式发布程序(不安装运行时运行.NET程序)达到不需要在目标机器上安装 ...
- POJ2282 The Counting Problem(数位DP)
用dp[pos][val][cnt]表示状态,pos是数位,val是当前统计的数字,cnt是目前统计的目标数字的出现次数 注意状态的转移过程,统计数字0时前导0的影响. 1 #include<c ...
- CSP-J2020 洛谷P7072 直播获奖(Splay/桶排序)
题目描述 NOI2130 即将举行.为了增加观赏性,CCF 决定逐一评出每个选手的成绩,并直播即时的获奖分数线.本次竞赛的获奖率为 w%,即当前排名前 w% 的选手的最低成绩就是即时的分数线. 更具体 ...
- IPv4 与 IPv6的区别
在介绍 IPv4 到 IPv6 区别之前,我们先来简单了解一下 IPv4 和 IPv6. IPv4 网际协议版本4(英语:Internet Protocol version 4,IPv4),又称互联网 ...
- vulnhub靶场|NAPPING: 1.0.1
准备: 攻击机:虚拟机kali.本机win10. 靶机:NAPPING: 1.0.1,地址我这里设置的桥接,,下载地址:https://download.vulnhub.com/napping/nap ...
- 【Kubernetes】K8s笔记(十一):Ingress 集群进出流量总管
目录 0. Ingress 解决了什么问题 1. Ingress Controller 2. 指定 Ingress Class 使用多个 Ingress Controller 3. 使用 YAML 描 ...