网站首页 > 技术文章 正文
在编程的世界里,事情并不总是按计划进行。
有时候,代码可能会遇到一些意外情况,比如用户输入了错误的格式,或者程序试图访问不存在的文件。这些意外情况在Python中被称为“异常”。
如果不对这些异常进行处理,程序可能会突然崩溃,给用户带来不好的体验。
幸运的是,Python提供了强大的异常处理机制,帮助我们优雅地应对这些问题。
这篇文章就来聊聊Python中的异常处理,并通过实际代码示例帮助你更好地理解和使用它们。
#01 什么是异常
异常是在程序运行过程中出现的意外情况。这些情况可能是由于用户输入错误、网络问题、文件不存在等原因引起的。Python中的异常分为两种:语法错误和运行时错误。
语法错误:这是由于代码不符合Python的语法规则引起的。
比如,忘记写冒号或者括号不匹配。语法错误通常会导致程序无法运行。
运行时错误:这是在程序运行过程中出现的错误。
比如,试图除以零或者访问列表中不存在的索引。运行时错误不会阻止程序启动,但会在运行过程中导致程序崩溃。
#02 Python中常见的异常类型
Python定义了许多内置的异常类型,每种类型都对应一种特定的错误情况。以下是一些常见的异常类型:
1.try-except语句:捕获和处理异常
在Python中,我们使用try-except语句来捕获和处理异常。try块中的代码是可能会引发异常的代码,而except块则用于处理这些异常。
如果try块中的代码引发了异常,程序会立即跳转到except块,并执行其中的代码。
try:
# 尝试执行的代码
result = 10 / 0
except ZeroDivisionError:
# 处理特定异常的代码
print("除数不能为0")
在这个例子中,try块中的代码试图除以零,这会引发ZeroDivisionError异常。
except块捕获了这个异常,并打印了一条友好的错误信息,而不是让程序崩溃。
2.捕获多个异常
一个try块可以有多个except子句,用于捕获和处理不同类型的异常。
try:
# 尝试执行的代码
result = 10 / int(input("请输入一个数字:"))
except ZeroDivisionError:
# 处理除零异常
print("除数不能为0")
except ValueError:
# 处理输入不是数字的异常
print("请输入一个有效的数字")
3.捕获所有异常
如果你想捕获所有类型的异常,可以使用一个通用的except子句,不指定具体的异常类型。
try:
# 尝试执行的代码
result = 10 / int(input("请输入一个数字:"))
except Exception as e:
# 捕获所有异常
print(f"发生了一个错误:{e}")
4.else和finally子句
try-except语句还可以包含else和finally子句。
else子句:如果没有异常发生,else子句中的代码将被执行。
finally子句:无论是否发生异常,finally子句中的代码都将被执行。这通常用于清理资源,比如关闭文件或释放网络连接。
try:
# 尝试执行的代码
result = 10 / int(input("请输入一个数字:"))
except ZeroDivisionError:
# 处理除零异常
print("除数不能为0")
else:
# 如果没有异常发生,执行else子句
print("计算结果是:", result)
finally:
# 无论是否发生异常,执行finally子句
print("程序执行完毕")
5.raise关键字:手动抛出异常
有时候,我们可能希望在程序中手动抛出一个异常。这可以通过raise关键字来实现。raise可以抛出一个指定类型的异常,并可以附带一个描述性的错误信息。
try:
# 手动抛出异常
raise ValueError("这是一个自定义的错误信息")
except ValueError as e:
# 捕获并处理异常
print(f"捕获到异常:{e}")
#03 实战演练:异常处理的应用
通过几个实际的例子,我们可以更好地理解异常处理的应用。
简易计算器
假设我们要编写一个简易的计算器,用户可以输入一个四则运算表达式,程序计算并输出结果。我们可以使用try-except语句来处理用户输入错误的情况。
while True:
try:
op = input('请输入一个四则运算算式(例如1+2):')
if '+' in op:
a = op.split('+')
result = int(a[0]) + int(a[1])
print(result)
elif '-' in op:
a = op.split('-')
result = int(a[0]) - int(a[1])
print(result)
elif '*' in op:
a = op.split('*')
result = int(a[0]) * int(a[1])
print(result)
elif '/' in op:
a = op.split('/')
result = int(a[0]) / int(a[1])
print(result)
elif op == 'C':
print('感谢您使用本计算器!')
break
else:
raise Exception('请按1+2这个格式输入算式!')
except ZeroDivisionError:
print('注意除法运算,除数不能为0!')
except Exception as e:
print(e)
文件读取
假设我们要编写一个程序,读取用户指定的文件内容。我们可以使用try-except语句来处理文件不存在的情况。
try:
filename = input('请输入文件名:')
with open(filename, 'r') as file:
content = file.read()
print(content)
except FileNotFoundError:
print(f"文件 {filename} 不存在")
通过这些代码示例,我们可以看到Python的异常处理机制在日常生活中的应用。无论是处理用户输入错误,还是处理文件读取问题,异常处理都能帮助我们编写出更加健壮和用户友好的程序。
掌握这些异常处理技巧,就像是给程序穿上了一层防护服,让它在面对意外情况时能够从容应对。
点击关注,免费获取打包整理的学习资料,内容包含但不限于电子书、教程、源码
猜你喜欢
- 2025-07-24 Python语言中的运算符(python中运算符的用法)
- 2025-07-24 Python自动化办公应用学习笔记13——表达式
- 2025-07-24 Python基础知识点总结(python基础重点)
- 2025-07-24 揭秘Python内置函数:为什么高手都离不开它们?
- 2025-07-24 Python基础入门之自定义函数详解(python 自定义方法)
- 2025-07-24 Python 闭包:深入理解函数式编程的核心概念
- 2025-07-24 Python中的函数注释:参数有冒号,声明后有-> 箭头
- 2025-07-24 Python编程之旅:定义自定义异常的艺术
- 2025-07-24 Python源代码文件字符编码声明(python文件指定编码)
- 2025-07-24 构建并发布你的自定义 Python 包(创建自定义函数python)
- 285℃Python短文,Python中的嵌套条件语句(六)
- 282℃PythonNet:实现Python与.Net代码相互调用!
- 281℃python笔记:for循环嵌套。end=""的作用,图形打印
- 279℃Python实现字符串小写转大写并写入文件
- 276℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 135℃原来2025是完美的平方年,一起探索六种平方的算吧
- 122℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 113℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)