首页 > Python资料 博客日记
32-异常捕获与抛出工具
2024-02-27 20:30:03Python资料围观158次
文章32-异常捕获与抛出工具分享给大家,欢迎收藏Python资料网,专注分享技术知识
异常捕获与抛出工具
即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。
运行期检测到的错误被称为异常。
大多数的异常都不会被程序处理,都以错误信息的形式展现在这里:
>>> 10 * (1/0) # 0 不能作为除数,触发异常
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ZeroDivisionError: division by zero
>>> 4 + spam*3 # spam 未定义,触发异常
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'spam' is not defined
>>> '2' + 2 # int 不能与 str 相加,触发异常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
抛出异常: raise
语句
当想要主动抛出异常时,可以使用 raise
语句,语法格式如下:
raise_stmt ::= "raise" [expression ["from" expression]]
实现语法:
raise [Exception [, args [, traceback]]]
实现案例:
x = 10
if x > 5:
raise Exception('x 不能大于 5。x 的值为: {}'.format(x))
执行以上代码会触发异常:
Traceback (most recent call last):
File "test.py", line 3, in <module>
raise Exception('x 不能大于 5。x 的值为: {}'.format(x))
Exception: x 不能大于 5。x 的值为: 10
注意:
如果不给 raise
参数,则 raise
会重新引发当前的异常(active exception)。
如果当前没有异常,则会引发 RuntimeError
。
异常处理:try
语句
try
语句可为一组语句指定异常处理句柄和/或清理代码,语法格式如下:
try_stmt ::= try1_stmt | try2_stmt | try3_stmt
try1_stmt ::= "try" ":" suite
("except" [expression ["as" identifier]] ":" suite)+
["else" ":" suite]
["finally" ":" suite]
try2_stmt ::= "try" ":" suite
("except" "*" expression ["as" identifier] ":" suite)+
["else" ":" suite]
["finally" ":" suite]
try3_stmt ::= "try" ":" suite
"finally" ":" suite
try
语句按照如下方式工作;
- 首先,执行
try
子句。 - 如果没有异常发生,且
else
子句存在则执行else
子句。 - 如果在执行
try
子句的过程中发生了异常,那么try
子句余下的部分将被忽略。 - 如果
except
子句存在且异常的类型和except
之后的名称相符,
那么对应的except
子句将被执行。 - 如果一个异常没有捕获,那么这个异常将会传递给上层的
try
中。 - 最后,执行
finally
语句。结束后抛出未被except
捕获的异常。
一个 try
语句可能包含多个 except
子句,来处理不同的异常,
但最多只有一个分支会被执行。
一个 except
子句可以同时处理多个异常,
将需要处理的异常打包成一个元组,例如:
except (RuntimeError, TypeError, NameError):
pass
如果 except
后忽略异常名称,则会捕获所有类型的异常。
import sys
try:
f = open('myfile.txt')
s = f.readline()
i = int(s.strip())
except OSError as err:
print("OS error: {0}".format(err))
except ValueError:
print("Could not convert data to an integer.")
except:
print("Unexpected error:", sys.exc_info()[0])
raise
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj