当前位置: 首页 > news >正文

(14)100天python从入门到拿捏《Python的错误与异常机制》

Python 的错误与异常机制


一、什么是错误与异常

  • 错误:是程序中语法或逻辑上的问题,导致程序无法运行或中断执行。
  • 异常:是程序运行时发生的错误事件,程序可以捕获并进行处理,从而避免崩溃。

# 语法错误(SyntaxError)—— 程序根本无法运行,SyntaxError: '(' was never closed
print("Hello"
# 异常(Exception)—— 程序可以运行但出错
print(10 / 0)

运行结果:

ZeroDivisionError: division by zero

二、常见的异常类型

异常类型说明
ZeroDivisionError除以零错误
IndexError列表或元组索引越界
KeyError字典中访问不存在的键
TypeError类型不兼容的操作
ValueError传入参数类型正确但值错误
FileNotFoundError文件不存在
IOError输入输出操作失败
AttributeError访问不存在的对象属性
ImportError导入模块失败
NameError使用未定义的变量
RuntimeError运行期错误(通用)

案例

# 常见异常演示
try:a = [1, 2, 3]print(a[5])           # IndexErrorprint(10 / 0)         # ZeroDivisionError
except Exception as e:print("捕获异常:", e)

🧾 输出

捕获异常: list index out of range

三、try-except 异常捕获语句

基本语法:

try:# 可能出错的代码
except 异常类型:# 发生该类型错误时执行的代码

案例

try:num = int(input("请输入数字: "))print("结果为:", 10 / num)
except ZeroDivisionError:print("不能除以0!")
except ValueError:print("输入的不是数字!")

🧾 输入输出

请输入数字: 0
不能除以0!

四、多个异常的捕获方式

可以一次性捕获多个异常类型:

案例

try:a = int("abc")b = 10 / 0
except (ValueError, ZeroDivisionError) as e:print("发生错误:", e)

🧾 输出

发生错误: invalid literal for int() with base 10: 'abc'

五、使用 elsefinally

  • else:如果 try 块中没有发生异常,则执行 else
  • finally:无论是否发生异常,都会执行(通常用于清理资源)。

案例

try:f = open("example.txt", "w")f.write("Hello World!")
except IOError:print("文件写入失败!")
else:print("文件写入成功!")
finally:f.close()print("文件已关闭。")

🧾 输出

文件写入成功!
文件已关闭。

六、抛出异常 (raise)

在某些情况下,我们希望手动引发异常,以提示调用者出现错误。

案例

def divide(a, b):if b == 0:raise ZeroDivisionError("除数不能为0!")return a / btry:result = divide(10, 0)
except ZeroDivisionError as e:print("错误:", e)

🧾 输出

错误: 除数不能为0!

七、自定义异常类

我们可以自定义异常类型,用于业务逻辑错误。
所有自定义异常都应继承自 Exception

案例

class NegativeNumberError(Exception):"""自定义异常:输入负数时触发"""passdef square_root(x):if x < 0:raise NegativeNumberError("不能对负数开平方!")return x ** 0.5try:print(square_root(-9))
except NegativeNumberError as e:print("自定义异常:", e)

🧾 输出

自定义异常: 不能对负数开平方!

八、异常捕获的层级结构

Python 异常类是有继承体系的:

BaseException├── SystemExit├── KeyboardInterrupt├── GeneratorExit└── Exception├── StopIteration├── StopAsyncIteration├── ArithmeticError│    ├── FloatingPointError│    ├── OverflowError│    └── ZeroDivisionError├── AssertionError├── AttributeError├── BufferError├── EOFError├── ImportError│    └── ModuleNotFoundError├── LookupError│    ├── IndexError│    └── KeyError├── MemoryError├── NameError│    └── UnboundLocalError├── OSError│    ├── BlockingIOError│    ├── ChildProcessError│    ├── ConnectionError│    │    ├── BrokenPipeError│    │    ├── ConnectionAbortedError│    │    ├── ConnectionRefusedError│    │    └── ConnectionResetError│    ├── FileExistsError│    ├── FileNotFoundError│    ├── InterruptedError│    ├── IsADirectoryError│    ├── NotADirectoryError│    ├── PermissionError│    ├── ProcessLookupError│    └── TimeoutError├── ReferenceError├── RuntimeError│    ├── NotImplementedError│    └── RecursionError├── SyntaxError│    └── IndentationError│         └── TabError├── SystemError├── TypeError├── ValueError│    └── UnicodeError│         ├── UnicodeDecodeError│         ├── UnicodeEncodeError│         └── UnicodeTranslateError└── Warning├── DeprecationWarning├── PendingDeprecationWarning├── RuntimeWarning├── SyntaxWarning├── UserWarning├── FutureWarning├── ImportWarning├── UnicodeWarning├── BytesWarning├── ResourceWarning└── EncodingWarning

如果用 except Exception:就能捕获所有非系统退出的异常。


九、综合案例:安全文件读取

任务:安全读取一个文件内容,如果不存在则提示并创建新文件

import osdef safe_read(filename):try:with open(filename, 'r', encoding='utf-8') as f:content = f.read()print("文件内容:", content)except FileNotFoundError:print(f"文件 '{filename}' 不存在,正在创建新文件...")with open(filename, 'w', encoding='utf-8') as f:f.write("This is a new file.")except Exception as e:print("发生其他错误:", e)finally:print("操作结束。")safe_read("test.txt")

🧾 运行结果

文件 'test.txt' 不存在,正在创建新文件...
操作结束。

十、总结表格

结构用途示例
try包含可能出错的代码try: x = 1/0
except捕获并处理异常except ZeroDivisionError:
else无异常时执行else: print("成功")
finally无论如何都会执行finally: print("结束")
raise主动抛出异常raise ValueError("错误")
自定义异常定义业务逻辑异常class MyError(Exception): pass

python学习专栏导航
(1)100天python从入门到拿捏《Python 3简介》
(2)100天python从入门到拿捏《python应用前景》
(3)100天python从入门到拿捏《数据类型》
(4)100天python从入门到拿捏《运算符》
(5)100天python从入门到拿捏《流程控制语句》
(6)100天python从入门到拿捏《推导式》
(7)100天python从入门到拿捏《迭代器和生成器》
(8)100天python从入门到拿捏《函数和匿名函数》
(9)100天python从入门到拿捏《装饰器》
(10)100天python从入门到拿捏《Python中的数据结构与自定义数据结构》
(11)100天python从入门到拿捏《模块》
(12)100天python从入门到拿捏《文件操作》
(13)100天python从入门到拿捏《目录操作》

http://www.dtcms.com/a/471933.html

相关文章:

  • 昆明网站建设方案托管怎么在网站首页做飘窗
  • 扁平化网站模板下载制作网页的流程步骤
  • 开发一个商城网站多少钱软件工程研究生学校排名
  • 自己做网站2008R2好还是win7如果做二手车网站
  • [嵌入式系统-98]:国内嵌入式AI算力板
  • iPaaS供应商推荐列表:国内外主流iPaaS平台有哪些
  • 湛江网站seo哪些网络公司可以做机票预订网站
  • 鄂城网站建设wordpress 关闭缩略图
  • 河南开元建设有限公司网站百度知道网页版
  • 多板块同时清洗治具:最大化提升清洗产能的工装方案
  • 周口建设企业网站公司wordpress 内嵌网页
  • 怎么做算命网站wordpress取消301跳转
  • 员工管理网站模板英文网站建设服务合同模板
  • 浙江省建设工程质监站网站php怎样做网站的注删页面
  • 泉州效率网络网站建设关于网站建设的奖项名称
  • 长沙市天心建设局网站网站国外推广
  • 德州建设网站有网站制作毕业设计论文
  • 网站开发网站制作报价织梦的网站收录不好
  • 学校网站建设是什么做网站完整过程
  • 湖州网站建设培训淘宝网站制作培训
  • 微信公众平台 网站 对接海报设计分析
  • dw网站建设流程西安网站建设-中国互联
  • 长沙网站排名优化费用中山网站设计与建设
  • 企业网站官网建设seo基础知识培训视频
  • 厦门集团网站建设中英文免费网站建设
  • 专业网站用php做医药网站开题报告
  • 用ssh做的简单网站郑州市建设安全管理协会网站
  • 网站建设企业宣传个人可以建设头条网站吗
  • 02-数据类型与基本语法-导读
  • 广州网站制作有哪些广告设计教学大纲