2024年最全Python错误处理和异常(必要的攻略)(1)

对于这类错误,下面会讲,但是解决的办法就是,你需要仔细!!!!

其次就是**异常,**这类错误,你需要学习今天的教程:

1. 错误类型

Python提供了许多内置的报错的异常类型,每种类型对应不同的错误情况。以下是一些常见的内置异常类型,以及它们的含义和常见原因:

  • SyntaxError(语法错误)
    • 含义:当Python代码的语法有误时引发。
    • 常见原因:拼写错误、缺少冒号、缩进错误等。
# 示例 SyntaxError
print "Hello, World!"

  • IndentationError(缩进错误)
    • 含义:当代码的缩进格式不正确时引发。
    • 常见原因:在代码块中混合使用了制表符和空格、缩进不一致等。
# 示例 IndentationError
def my_function():
print("Indentation Error")

  • NameError(名称错误)
    • 含义:当使用一个未定义的变量或函数时引发。
    • 常见原因:拼写错误、变量/函数未声明就被使用等。
# 示例 NameError
print(my_variable)

  • TypeError(类型错误)
    • 含义:当操作或函数应用于不适当类型的对象时引发。
    • 常见原因:尝试对不同类型的对象执行不兼容的操作、传递错误类型的参数等。
# 示例 TypeError
num = 10
print("Number: " + num)  # 试图将整数和字符串连接

  • ZeroDivisionError(除零错误)
    • 含义:当尝试除以零时引发。
    • 常见原因:明确或意外地尝试除以0。
# 示例 ZeroDivisionError
result = 10 / 0

  • FileNotFoundError(文件未找到错误)
    • 含义:当试图打开不存在的文件时引发。
    • 常见原因:文件路径错误、文件被移动或删除等。
# 示例 FileNotFoundError
with open("non_existent_file.txt", "r") as file:
    content = file.read()

  • ValueError(值错误)
    • 含义:当函数接收到一个正确类型但不适合的值时引发。
    • 常见原因:传递给函数的参数值超出了预期的范围或不符合函数的要求。
# 示例 ValueError
int("abc")   # 试图将无法转换为整数的字符串转换为整数

以上只是一些常见的内置异常类型示例。这些错误类型,都会在控制台进行输出。

2. 异常(Exceptions)

与错误不同,异常是一种更加可控和处理的情况。当程序遇到意外或不正常的情况时,会引发异常。这些异常可以被程序捕获(catch)并进行适当的处理,使程序能够继续执行。

在Python中,提供了一种叫做“assert(断言)”的方式,来判断一个表达式,在表达式条件为 false 的时候触发异常。

下面讲解异常处理办法:

2.1 tryexcept 块

使用 try/except 语句来进行错误处理,语法如下:

try:
    # 可能会引发异常的代码块
    # 这里放置你希望捕获异常的代码
except Exception:
    # 发生异常时的处理代码
    # 在这里你可以处理异常,或者进行其他操作

结构如如下:

try 子句中的代码块会被尝试执行。如果执行过程中发生异常,则会跳到 except 子句执行。

except 子句可以指定要处理的异常类型。如果异常类型与 except 子句指定的类型匹配,则会执行该子句中的代码块。

示例代码:

try:
    x = 1 / 0
except ZeroDivisionError as e:
    print("发生了零除错误:", e)

# 输出:发生了零除错误: division by zero

2.2 捕获特定类型的异常

有时候,你可能只想捕获某系个特定类型的异常,以便更精确地处理这些异常。这时,可以通过指定 except 后面的异常类型来实现。

try:
    # 可能会引发异常的代码块
except SpecificExceptionType:
    # 处理特定类型的异常
except AnotherSpecificExceptionType:
    # 处理另一种特定类型的异常
except (Type1, Type2):
    # 处理多种类型的异常
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:
    # 没有异常时要执行的代码

结构示意图:

示例代码:

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

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

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

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

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

语法如下:

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

结构示意图:

示例代码:

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)


做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。



别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。

我先来介绍一下这些东西怎么用,文末抱走。

* * *



**(1)Python所有方向的学习路线(新版)**

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



最近我才对这些路线做了一下新的更新,知识体系更全面了。



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



**(2)Python学习视频**



包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。



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



**(3)100多个练手项目**

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。



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



**(4)200多本电子书**  

  

这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。



基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。



**(5)Python知识点汇总**

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。



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



**(6)其他资料**



还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。



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

**这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。**




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

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值