对于这类错误,下面会讲,但是解决的办法就是,你需要仔细!!!!
其次就是**异常,**这类错误,你需要学习今天的教程:
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 try
和except
块
使用 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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**