2024年最新Python错误处理和异常(必要的攻略),binder机制面试题

本文详细介绍了Python中的错误处理和异常处理机制,包括如何捕获和处理ZeroDivisionError、ArithmeticError等常见错误,以及自定义异常和使用logging模块进行错误日志记录。通过实例展示了在函数调用中如何妥善处理各种异常,帮助开发者更好地理解和掌握Python异常处理的实践技巧。

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

except Exception:
# 处理所有其他类型的异常


* 你可以列出一个或多个 `except` 块,每个 `except` 块指定要处理的特定异常类型。
* 如果发生的异常类型与 `except` 块中指定的类型匹配,Python 将执行该 `except` 块中的代码。
* 如果没有匹配的 `except` 块,那么异常将继续向上层传播。


**示例代码:**



捕获 ZeroDivisionError 以处理除零错误

try:
x = 10 / 0 # 尝试进行除以零的操作
except ZeroDivisionError:
print(“除以零错误发生了!”)
except ArithmeticError:
print(“数学错误发生了!”)



> 
>  第一个  
>  `except ZeroDivisionError` 块处理除以零错误。 
>    
>  第二个  
>  `except ArithmeticError` 块是为了捕获更一般的算术错误,但它并不会捕获除以零错误,因为  
>  `ZeroDivisionError` 是  
>  `ArithmeticError` 的子类。 
> 



#### 2.3 多个 `except` 块


有时候,具体的异常类型需要编写不同的处理逻辑,那就可以采用多个 `except` 块来处理不同类型的异常。


语法如下,按顺序列出 `except` 块以处理特定的异常情况:



try:
# 可能会引发异常的代码块
except SpecificExceptionType1:
# 处理特定类型1的异常
except SpecificExceptionType2:
# 处理特定类型2的异常
except AnotherExceptionType:
# 处理另一种异常类型
except Exception:
# 处理所有其他类型的异常


在这个结构中:当一个 `except` 块处理了一个异常后,程序将不再继续尝试匹配后续的 `except` 块。因此,应该按照希望处理的特定异常的顺序列出 `except` 块。


**示例代码:**



try:
x = int(input("请输入一个整数: "))
result = 10 / x
except ValueError:
print(“输入的不是一个有效的整数!”)
except ZeroDivisionError:
print(“除以零错误发生了!”)
except Exception:
print(“发生了其他类型的异常!”)


上面的代码中:


* 如果用户输入的不是一个整数,那么 `ValueError` 异常将被捕获并处理。
* 如果用户输入的是零,那么 `ZeroDivisionError` 异常将被捕获并处理。
* 如果用户输入的是一个非零整数,那么不会引发异常,程序将继续执行。



#### 2.4 `else` 和 `finally` 语句


`else` 语句:当没有异常发生时执行的代码块,`else` 语句用于指定在 `try` 块中没有发生任何异常时要执行的代码。通常用于处理只在没有异常时才应该执行的操作。


**语法如下:**



try:
# 可能会引发异常的代码块
except ExceptionType1:
# 处理特定类型1的异常
except ExceptionType2:
# 处理特定类型2的异常
else:
# 没有异常时要执行的代码


**结构示意图:**


![](https://img-blog.csdnimg.cn/img_convert/6a6465d44be8c22bf7cbb15fa8bae5c1.png)


**示例代码:**



try:
x = int(input("请输入一个整数: "))
except ValueError:
print(“输入的不是一个有效的整数!”)
else:
print(“您输入的是一个整数。”)


代码解释:如果用户输入的是一个整数,**`else`**语句将会执行,打印出 "您输入的是一个整数。


如果用户输入的不是一个整数,**`ValueError`**异常将被捕获并处理。



* **`finally` 语句:无论是否发生异常都会执行的清理代码块**


**`finally`**语句用于指定在 `try` 块结束时必须执行的代码,无论是否发生了异常。这个代码块通常用于执行清理操作,比如上一篇文章中,我们讲到关闭文件或数据库连接等。


**语法如下:**



try:
# 可能会引发异常的代码块
except ExceptionType1:
# 处理特定类型1的异常
except ExceptionType2:
# 处理特定类型2的异常
finally:
# 无论是否发生异常都要执行的代码


**结构示意图:**



![](https://img-blog.csdnimg.cn/img_convert/68b1a020d676e018873f54b0d7a2952d.png)


**示例代码:**



try:
f = open(“example.txt”, “r”)
# 读取文件内容等操作
except FileNotFoundError:
print(“文件未找到!”)
finally:
f.close() # 确保文件在最终结束时被关闭


代码解释:不管是否发生 `FileNotFoundError` 异常,`finally` 块中的 `f.close()` 语句都会确保打开的文件被关闭。


那么i前面讲了 else和finally,一句话概括就是:`else` 语句用于处理没有引发异常时的代码,而 `finally` 语句用于确保一些操作(如资源清理)无论是否发生异常都会执行。


### 3. 抛出异常


在编程的时候,有些特殊请款,比如,某些情况下应该引发异常,那么,你可以使用 `raise` 语句来主动抛出异常。


比如说,某函数要检查传入的参数 `x` 是否为负数。如果是负数,它将抛出一个 `ValueError` 异常,并显示一个错误消息。那么你就可以这么写:



def some_function(x):
if x < 0:
raise ValueError(“x 不能是负数”)
# 其他代码

调用函数并传入负数

try:
some_function(-5)
except ValueError as e:
print(e)


#### 3.1 自定义异常


你也可以定义自己的异常类,这样可以更好地找到和标识不同类型的错误。



class CustomError(Exception):
def init(self, message):
self.message = message

def __str__(self):
    return f"CustomError: {self.message}"

def some_function(x):
if x < 0:
raise CustomError(“x 不能是负数”)
# 其他代码

调用函数并传入负数

try:
some_function(-5)
except CustomError as e:
print(e)


上面的例子中,`CustomError` 是一个继承自 `Exception` 的自定义异常类。它有一个 `message` 属性来存储错误消息,并重写了 `__str__` 方法以便打印有意义的错误信息。



### 4. 异常处理的最佳实践


现在我们来通过几个例子讲讲异常的最佳实践案例。




| 实践类型 | 说明 |
| --- | --- |
| 记录异常信息 | 在捕获异常时,最好记录异常的详细信息,以便后续调试和分析。 |
| 避免捕获所有异常 | 尽量避免使用裸露的 except 语句,因为它会捕获所有异常,包括你可能没有预料到的异常。这会隐藏程序中的潜在错误。 |
| 在适当的时候引发异常 | 当检测到某些情况不符合预期时,应该使用 raise 引发异常,以便让调用者或上层代码知道发生了什么问题。 |
| 处理特定异常 | 使用多个 except 块来处理不同类型的异常,使得代码更具可读性和可维护性。 |
| 使用 else 和 finally | else 用于处理没有异常时的情况,finally 用于确保清理操作得到执行。 |


**示例 1:记录异常信息**



import logging

try:
result = 10 / 0
except ZeroDivisionError as e:
logging.error(f"发生除零错误:{e}")


**示例 2:避免捕获所有异常**



try:
# 可能会引发异常的代码
except SpecificException:
# 处理特定异常
except AnotherSpecificException:
# 处理另一种特定异常
except Exception as e:
logging.error(f"发生异常:{e}")


**示例 3:引发异常**



def calculate_age(age):
if age < 0:
raise ValueError(“年龄不能是负数”)
# 其他代码

try:
calculate_age(-5)
except ValueError as e:
logging.error(f"发生值错误:{e}")


**示例 4:使用 `else` 和 `finally`**



try:
f = open(“example.txt”, “r”)
# 读取文件等操作
except FileNotFoundError as e:
logging.error(f"文件未找到:{e}")
else:
print(“文件读取成功!”)
finally:
f.close()



### 结语


在 Python 中,想要你的代码可靠、健壮代。良好的异常处理必不可少。如果你敏感一点,你就会发现存在错误和异常处理的代码更容易阅读、调试和维护。只需要通过使用**`try`、`except`、`raise`、自定义异常**等操作。你就可以很好地控制程序的行为,使代码在面对各种情况时表现更加稳健和可靠。



如果大家跟着我的代码一起学习,相信你一定会有所收获。我们下一篇文章仍然会继续Python高阶特性的讲解,欢迎大家和我一起**继续学习、记录**python的下一个知识点。


如果感觉阅读对您还有些作用,可以**评论留言,关注我**。谢谢您的阅读!


**往期学习:**


[Python安装教程(版本3.8.10)windows10]( )


[Linux系统:安装Conda(miniconda)]( )


[Conda快速安装的解决方法(Mamba安装)]( )


[VSCode安装教程(版本:1.87.0)Windows10]( )


[Python基础语法:从入门到精通的必备指南]( )


[Python的基本数据类型]( )


[Python数据类型间的转换(隐式、显式)-优快云博客]( )


[Python基础知识:运算符详解-优快云博客]( )


[Python基础知识:数字类型及数学函数详解-优快云博客]( )


[Python字符串操作及方法详解!一篇就搞定!-优快云博客]( )


[Python列表及其操作详解,从此不再迷茫!-优快云博客]( )


[Python元组(Tuple)深度解析!]( )


[Python字典的使用技巧(一篇详解)]( )


[Python条件控制深度解析,成为编程必备]( )


[Python循环语句全解析(附实战演练)]( )


[Python函数高效编程技巧,提升你的代码效率!]( )



**一、Python所有方向的学习路线**

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

![img](https://img-blog.csdnimg.cn/1d40facda2b84990b8e1743f5487d455.png)  
![img](https://img-blog.csdnimg.cn/0fc11d4a31bd431dbf124f67f1749046.png)

**二、Python必备开发工具**

工具都帮大家整理好了,安装就可直接上手!![img](https://img-blog.csdnimg.cn/ff266f529c6a46c4bc28e5f895dec647.gif#pic_center)

**三、最新Python学习笔记**

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

![img](https://img-blog.csdnimg.cn/6d414e9f494742db8bcc3fa312200539.png)

**四、Python视频合集**

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

![img](https://img-blog.csdnimg.cn/a806d9b941c645858c61d161aec43789.png)

**五、实战案例**

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。![img](https://img-blog.csdnimg.cn/a353983317b14d3c8856824a0d6186c1.png)

**六、面试宝典**

![在这里插入图片描述](https://img-blog.csdnimg.cn/97c454a3e5b4439b8600b50011cc8fe4.png)

![在这里插入图片描述](https://img-blog.csdnimg.cn/111f5462e7df433b981dc2430bb9ad39.png)

###### **简历模板**![在这里插入图片描述](https://img-blog.csdnimg.cn/646863996ac44da8af500c049bb72fbd.png#pic_center)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.youkuaiyun.com/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值