Python异常处理中的9个常见错误及其解决办法,建议收藏

在Python编程中,异常处理是确保程序健壮性和可靠性的重要部分。然而,在使用异常处理时,开发者可能会犯一些常见的错误。以下是9个常见的异常处理错误及其解决办法:

1. 语法错误 (SyntaxError)

语法错误是最常见的错误之一。它通常发生在你写的代码不符合 Python 的语法规则时。比如,少了一个冒号 : 或者括号没有正确闭合。

例子:

def print_hello()  print("Hello, world!")  

输出:

 File "<stdin>", line 1  def print_hello()  ^  
SyntaxError: invalid syntax

解决办法:

检查函数定义是否有遗漏的冒号。

def print_hello():  print("Hello, world!")  # 添加了冒号  

2. 缩进错误 (IndentationError)

Python 使用缩进来区分不同的代码块。如果你不小心改变了缩进级别,就会出现缩进错误。

例子:

def say_hello(name):  
print(f"Hello, {name}!")  

输出:

 File "<stdin>", line 2  
print(f"Hello, {name}!")  ^  
IndentationError: expected an indented block

解决办法:

确保所有属于同一个代码块的语句具有相同的缩进。

def say_hello(name):  print(f"Hello, {name}!")  # 正确的缩进  

3. 类型错误 (TypeError)

当你尝试执行的操作不支持该类型的数据时,就会发生类型错误。例如,尝试将整数和字符串相加。

例子:

num = 5  
text = "hello"  
result = num + text  

输出:

Traceback (most recent call last):  File "<stdin>", line 3, in <module>  
TypeError: unsupported operand type(s) for +: 'int' and 'str'  

解决办法:

确保参与运算的数据类型一致或进行类型转换。

num = 5  
text = "hello"  
# 将数字转换为字符串  
result = str(num) + text  
print(result)  # 输出: 5hello  

4. 名称错误 (NameError)

当程序试图访问一个未被定义的变量时,就会抛出名称错误。

例子:

print(age)  

输出:

NameError: name 'age' is not defined  

解决办法:

确保所有使用的变量都已经被正确地声明。

age = 25  
print(age)  # 正确  

5. 属性错误 (AttributeError)

属性错误发生在尝试访问对象不存在的属性或方法时。

例子:

num = 5  
print(num.length)  

输出:

AttributeError: 'int' object has no attribute 'length'  

解决办法:

确认对象确实拥有你要访问的属性。

text = "hello"  
print(len(text))  # 使用内置函数 len() 而不是 .length  

6. 键错误 (KeyError)

键错误发生在尝试访问字典中不存在的键时。

例子:

person = {"name": "Alice", "age": 25}  
print(person["gender"])  

输出:

KeyError: 'gender'  

解决办法:

确认字典中确实存在要访问的键,或者使用 get() 方法来避免抛出异常。

person = {"name": "Alice", "age": 25}  
# 使用 get() 方法  
print(person.get("gender", "Unknown"))  # 输出: Unknown  

解释:

get() 方法可以接受两个参数:键和默认值。如果键不存在,则返回默认值。

7. 索引错误 (IndexError)

索引错误发生在尝试访问列表或其他序列类型的索引超出范围时。

例子:

numbers = [1, 2, 3]  
print(numbers[3])  

输出:

IndexError: list index out of range  

解决办法:

确保索引值在有效范围内,或者使用 try-except 块来捕获异常。

numbers = [1, 2, 3]  
try:  print(numbers[3])  # 索引超出范围  
except IndexError:  print("索引超出范围")  

解释:

try-except 块可以用来捕获并处理可能出现的异常,从而避免程序崩溃。

8. 除零错误 (ZeroDivisionError)

除零错误发生在尝试将一个数除以零时。

例子:

result = 10 / 0  

输出:

ZeroDivisionError: division by zero  

解决办法:

确保除数不为零,或者使用 try-except 块来捕获异常。

numerator = 10  
denominator = 0  try:  result = numerator / denominator  
except ZeroDivisionError:  print("除数不能为零")  

解释:

在数学中,任何数除以零都是没有意义的。因此,Python 会抛出 ZeroDivisionError 异常。

9. 文件错误 (IOError/EOFError/FileNotFoundError)

文件错误发生在读取或写入文件时出现问题。常见的文件错误包括 IOErrorEOFErrorFileNotFoundError

例子:

with open("nonexistent.txt", "r") as file:  content = file.read()  print(content)  

输出:

FileNotFoundError: [Errno 2] No such file or directory: 'nonexistent.txt'  

解决办法:

确保文件路径正确且文件存在,或者使用 try-except 块来捕获异常。

filename = "nonexistent.txt"  try:  with open(filename, "r") as file:  content = file.read()  print(content)  
except FileNotFoundError:  print(f"文件 '{filename}' 不存在")  

解释:

使用 try-except 块可以捕获 FileNotFoundError 并给出相应的提示信息,避免程序崩溃。

实战案例:日志记录系统

假设你正在开发一个简单的日志记录系统,用于记录用户的操作。你需要处理可能发生的各种异常情况,并将异常信息记录下来。

需求描述:

1. 用户可以执行登录、注销等操作。2. 如果用户执行的操作失败(如输入错误的用户名或密码),需要记录异常信息。3. 如果文件不存在或无法写入,也需要记录异常信息。

实现代码:

import logging  # 配置日志记录器  
logging.basicConfig(filename="app.log", level=logging.ERROR)  def log_action(action, user_id):  try:  with open("users.txt", "r") as file:  users = file.readlines()  if any(user.strip() == user_id for user in users):  logging.info(f"{action} - User ID: {user_id}")  return True  else:  raise ValueError("无效的用户ID")  except FileNotFoundError:  logging.error("找不到用户文件")  except IOError:  logging.error("无法读取用户文件")  except Exception as e:  logging.error(f"未知错误: {e}")  return False  # 测试用例  
if __name__ == "__main__":  # 创建测试文件  with open("users.txt", "w") as file:  file.write("alice\n")  file.write("bob\n")  # 正常情况  if log_action("登录成功", "alice"):  print("登录成功")  # 无效用户ID  if not log_action("登录失败", "invalid_user"):  print("登录失败")  # 文件不存在  if not log_action("登录失败", "alice"):  print("登录失败")  # 删除测试文件  import os  os.remove("users.txt")  

输出结果:

1. 正常情况:

登录成功  

2. 无效用户ID:

登录失败  

3. 文件不存在:

登录失败  

4. 日志文件内容:

ERROR:root:无效的用户ID  
ERROR:root:找不到用户文件  

解释:

1. 正常情况:

用户 alice 存在于 users.txt 文件中,因此登录成功。

2. 无效用户ID:

用户 invalid_user 不存在于 users.txt 文件中,因此抛出 ValueError 并记录到日志文件中。

3. 文件不存在:

在删除 users.txt 文件后,尝试读取文件时会抛出 FileNotFoundError 并记录到日志文件中。

通过避免这些常见的异常处理错误,你可以编写更健壮、更可靠的Python代码。

总结

本文详细介绍了九种常见的 Python 异常类型及其处理方法。通过学习这些异常类型及其解决办法,你可以更好地处理编程中的错误,使代码更加健壮。希望今天的分享对你有所帮助!记得动手实践哦,下期见!

好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请动动你可爱的小手指点赞、转发、在看吧!


如果你是准备学习Python或者正在学习(想通过Python兼职),下面这些你应该能用得上:

【点击这里】领取!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!
Python所有方向的学习路线图,清楚各个方向要学什么东西
100多节Python课程视频,涵盖必备基础、爬虫和数据分析
100多个Python实战案例,学习不再是只会理论
华为出品独家Python漫画教程 ,手机也能学习
历年互联网企业Python面试真题,复习时非常方便
————————————————
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1555946.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【梯级水电站调度优化】基于线性递减策略优化粒子群算法

课题名称&#xff1a; 基于改进粒子群算法的梯级水电站调度优化 改进方向&#xff1a; 线性递减策略优化粒子群PSO 代码获取方式&#xff08;付费&#xff09;&#xff1a; 相关资料&#xff1a; 1. 粒子群算法的基本原理 2. 梯级水电站调度优化模型 3. 代码注释 4. 代码…

第十一章 缓存之更新/穿透/雪崩/击穿

目录 一、什么是缓存 二、缓存更新策略 2.1. 缓存主动更新策略 2.1.1. Cache Aside模式&#xff08;主流&#xff09;‌ 2.1.2. Read/Write Through模式‌ 2.1‌.3. Write Behind模式‌ 2.1.4. 总结 三、缓存穿透 四、缓存雪崩 五、缓存击穿 本文中的图片内容部分来源…

【笔记】神领物流Day1.1.20权限管家

传智权限管家是一个通用的权限管理中台服务&#xff0c;在神领物流项目中&#xff0c;我们使用权限系统管理企业内部员工&#xff0c;比如&#xff1a;快递员、司机、管理员等。 在权限管家中可以管理用户&#xff0c;管理后台系统的菜单&#xff0c;以及角色的管理。 权限管家…

视频加字幕用什么软件最快?12款工具快速添加字幕!

对于大多数同学来讲&#xff0c;剪辑中比较头疼的就是如何给视频加字幕和唱词啦&#xff0c;特别是用Pr或者FCXP等专业剪辑软件&#xff0c;加字幕也是特别费时的&#xff0c;哪怕是有批量添加的功能orz... 虽然关于这方面的内容已经很多啦&#xff0c;但是真正全面的内容还特…

哈希闭散列的实现与机制

目录 哈希的介绍 哈希冲突 原因 影响 解决方法 实例 哈希函数 哈希函数设计原则&#xff1a; 常见哈希函数 闭散列 线性探测的实现 代码解读 1. 命名空间和枚举定义 2. 哈希表节点结构体 3. 哈希函数模板 4. 哈希表类 5. 插入、查找和删除逻辑 二次探测 哈希的…

【React】事件机制

事件机制 react 基于浏览器的事件机制自身实现了一套事件机制&#xff0c;称为合成事件。比如&#xff1a;onclick -> onClick 获取原生事件&#xff1a;e.nativeEvent onClick 并不会将事件代理函数绑定到真实的 DOM节点上&#xff0c;而是将所有的事件绑定到结构的最外层…

latex本地运行(MiKTeX+VScode)-20241006

1、安装 LaTex 主流的分发版本应该就是 TeXLive 和 MikTeX 了,这里使用 MikTex(只有几百M)—— TeXLive 太大了、默认安装全部包,可选自选部分安装单实在有些许麻烦,MikTeX 则方便得多,需要的时候可以自动安装全部包 点击跳转到 MiKTeX 官网,直接下载即可:不用担心什…

体系结构论文(五十五):Full Stack Optimization of Transformer Inference

Full Stack Optimization of Transformer Inference 一、文章介绍 背景 Transformer模型被广泛应用于各种任务&#xff0c;如计算机视觉、自然语言处理、语音识别等&#xff0c;原因是它们的准确度很高。然而&#xff0c;这些模型的复杂性和规模不断增加&#xff0c;导致它们…

连续时间傅里叶变换

一、非周期信号的表示&#xff1a;连续时间傅里叶变换 傅里叶变换对&#xff1a; 通常称为的频谱 二、傅里叶变换的收敛 1、绝对可积 2、在任何有限区间内&#xff0c;只有有限个最大值和最小值 3、在任何有限区间内&#xff0c;有有限个不连续点&#xff0c;且在每个不连…

信息安全工程师(36)访问控制主要产品与技术指标

前言 访问控制是确保系统资源安全的重要手段&#xff0c;其主要产品和技术指标对于理解和实施有效的访问控制策略至关重要。 一、访问控制主要产品 访问控制产品种类繁多&#xff0c;根据应用场景和需求的不同&#xff0c;可以分为以下几类&#xff1a; 防火墙&#xff1a; 功能…

Linux环境搭建(云服务器)

前言 Linux是一款由林纳斯托瓦兹开源的操作系统&#xff0c;时至今日拥有着丰富的讨论资源和系统完整性&#xff0c;基本普及于市场中的公司内部&#xff0c;所以有着很大的学习价值。学习Linux主要分为两大部分&#xff0c;一是学习Linux的系统操作&#xff0c;包括且不限于掌…

codetop标签树刷题(二)!!暴打面试官!!!!

个人复习用 1.二叉搜索树中第k小的元素2.删除给定值的叶子节点3.把二叉搜索树转换为累加树4.合并二叉树5.翻转二叉树6.二叉树中所有距离为k的节点7.路径总和II8.寻找重复的子树9.二叉树的序列化和反序列化 1.二叉搜索树中第k小的元素 给定二叉搜索树的根节点root&#xff0c;和…

【一起学NLP】Chapter3-使用神经网络解决问题

目录 使用神经网络解决问题Tip:数据集划分学习使用的代码Tip:epochTip:数据打乱Trainer类Tip-高速化计算 使用神经网络解决问题 import sys sys.path.append(..) # 为了引入父目录的文件而进行的设定 from dataset import spiral import matplotlib.pyplot as pltx,t spiral.…

【Spring】“请求“ 之传递单个参数、传递多个参数和传递对象

文章目录 请求1. 传递单个参数注意事项1 . **正常传递参数**2 . **不传递 age 参数**3 . **传递参数类型不匹配** 2. 传递多个参数3. 传递对象 请求 访问不同的路径&#xff0c;就是发送不同的请求。在发送请求时&#xff0c;可能会带一些参数&#xff0c;所以学习 Spring 的请…

传奇GOM引擎架设好进游戏后提示请关闭非法外挂,重新登录,如何处理?

今天在架设一个GOM引擎的版本时&#xff0c;进游戏之后刚开始是弹出一个对话框&#xff0c;提示请关闭非法外挂&#xff0c;重新登录&#xff0c;我用的是绿盟登陆器&#xff0c;同时用的也是绿盟插件&#xff0c;刚开始我以为是绿盟登录器的问题&#xff0c;于是就换成原版gom…

如何构建LSTM神经网络模型

一、了解LSTM 1. 核心思想 首先&#xff0c;LSTM 是 RNN&#xff08;循环神经网络&#xff09;的变体。它通过引入细胞状态 C(t) 贯穿于整个网络模型&#xff0c;达到长久记忆的效果&#xff0c;进而解决了 RNN 的长期依赖问题。 2. 思维导图 每个LSTM层次都有三个重要的门结构…

VMware ESXi更改https的TLS协议版本

简要概述 TLS 1.0 和 1.1 是已弃用的协议&#xff0c;具有广为人知的缺点和漏洞。应在所有接口上启用 TLS 1.2&#xff0c;并在支持的情况下禁用 SSLv3、TL 1.1 和 1.0。强制要求 TLS 1.2 可能会破坏 vSphere 的第三方集成和加载项。在实施 TLS 1.2 后仔细测试这些集成&#x…

maven指定模块快速打包idea插件Quick Maven Package

问题背景描述 在实际开发项目中&#xff0c;我们的maven项目结构可能不是单一maven项目结构&#xff0c;项目一般会用parent方式将各个项目进行规范&#xff1b; 随着组件的数量增加&#xff0c;就会引入一个问题&#xff1a;我们只想打包某一个修改后的组件A时就变得很不方便…

C++ 算法学习——1.8 悬线法

1.问题引入&#xff1a;对于一个矩形图&#xff0c;图中放置着不少障碍&#xff0c;要求出最大的不含障碍的矩形。 2.分析&#xff1a;显然一个极大矩形是左右上下都被障碍挡住&#xff0c;无法再扩大的矩形&#xff0c;此时障碍也包括边界。 3.方法&#xff1a;悬线法考虑以…

01 从0开始搭建django环境

1 安装相关版本的django&#xff0c;这里&#xff0c;我以5.1.1为例子 pip3 install django5.1.1 (.venv) D:\DjangoCode\MS>pip3 install django5.1.1 Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting django5.1.1Using cached https://pypi.t…