我的Python学习日记
| Date | Log |
|---|---|
| 2023.12.07 | 完成编写 |
9. 错误和异常
由于在学习一些方法时要使用一些实例,很多时候就会产生各种各样的错误异常以及一些像raise和try这样没学过的关键字,每次遇到都要查😭,所以单独开一章来学习错误和异常的知识
在Python中,语法错误和异常是两种常见错误:
9.1 语法错误
语法错误顾名思义就是违反了Python的语法规则引起的错误,比如本人因为以前使用C语言较多,所以现在径长会出现缺少冒号等错误,一些常见的错误如下:
| Error | 描述 |
|---|---|
| SyntaxError: invalid syntax | 一般性的语法错误,即Python解释器无法识别代码 |
| SyntaxError: invalid character in identifier | 标识符中包含了非法字符 |
| SyntaxError: unmatched ‘)’, unmatched ‘]’, unmatched ‘}’ | 括号未匹配,可能是括号未正确闭合或嵌套错误 |
| SyntaxError: missing parentheses in call to ‘function’ | 函数调用时缺少括号 |
| IndentationError: unexpected indent | 发生了意外的缩进错误, 也是我这种新手常会犯的错误 |
| IndentationError: expected an indented block | 在需要缩进的地方没有提供缩进 |
语法分析器会指出了出错的一行,并且在最先找到的错误的位置标记了一个小小的箭头。
9.2 异常
当程序语法正确但程序本身运行出现错误产生的即为异常(Exception)
异常以不同的类型出现,作为信息的一部分打印出来,以调用栈的形式显示具体信息
常见的异常有NameError(未定义变量名等)和TypeError(操作的变量类型不能匹配)
更多异常类型可以查阅Python 官方文档 内置异常部分
发生异常时会中断程序运行
9.3 异常处理
9.3.1 try/except 语句
异常捕捉可以使用try/except语句
基本语法如下:
try:
# 可能引发异常的代码块
except SomeException as e:
# 处理异常的代码块
try语句块包含可能引发异常的代码。except语句块包含在发生异常时要执行的代码。- 如果在执行
try子句的过程中发生了异常,那么try子句余下的部分将被忽略,跳转到对应的except语句后的代码块中。 - 我们可以在
except后面指定要捕获的异常类型(例如 ValueError、TypeError)或者捕获所有异常使用except Exception或者except后什么都不加。 - 一个
try后面可以使用多个except语句来处理不同类型的异常-
try: # 可能引发异常的代码块 result = 1/0 except ZeroDivisionError as e: # 处理除零错误的代码 print(f"ZeroDivisionError: {e}") except ValueError as e: # 处理值错误的代码 print(f"ValueError: {e}") except Exception as e: # 处理其他异常的代码 print(f"产生了一个未预料的错误: {e}")
-
- 一个
except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组 - 如果一个异常没有与任何的
except匹配,那么这个异常将会传递给上层的try中。
9.3.2 try/except...else 语句
在try/except语句后还可以跟一个可选的子句else,置于所有except子句的后面。
基本语法如下:
try:
# 可能引发异常的代码块
except SomeException as e:
# 处理异常的代码块
else:
# 没有异常时执行的代码块
9.3.3 try/finally 语句
finally语句置于else子句之后:
try:
# 可能引发异常的代码块
except SomeException as e:
# 处理异常的代码块
else:
# 没有异常时执行的代码块
finally:
# 不管有没有异常都会执行的代码块
9.4 抛出异常
raise语句是Python中用于手动引发异常的关键字。通过 raise 语句,我们可以在代码中显式地触发异常,从而通知程序出现了某种错误或特殊情况。
raise [Exception[, args[, traceback]]]
- Exception:引发的异常类型。可以是Python内置的异常类型(例如,ValueError、TypeError等),也可以是自定义的异常类。
- args:传递给异常构造函数的参数,用于提供关于异常的额外信息。
- traceback:一个可选的参数,通常不需要手动提供。它是一个保存有关异常发生位置的堆栈跟踪信息的对象。
x = 10
if x > 5:
raise ValueError('x 不能大于 5。x 的值为: {}'.format(x)) # 如果x大于5则引发一个内置的ValueError
如果要使用自定义的错误类型,则需要提前使用class定义,继承自Exception类:
class MoreThan10Error(Exception):
pass
x = 10
if x > 5:
raise MoreThan10Error('x 不能大于 5。x 的值为: {}'.format(x))
raise通常与try/except语句结合使用:
class MoreThan10Error(Exception):
pass
try:
x = 10
if x > 5:
raise MoreThan10Error('x 不能大于 5。x 的值为: {}'.format(x))
except MoreThan10Error:
print("Error: MoreThan10Error")
9.5 assert
除了上述的方法外,我们可以直接使用assert语句触发异常,具体语法及说明如下:
assert 判断语句
- 当该判断语句为True时,程序正常执行
- 当该判断语句为False时,程序触发异常,类型为
AssertionError
本文记录了作者在学习Python过程中对错误和异常的理解,包括语法错误的常见类型、异常的概念及其分类、try/except、try/except…else/finally语句的用法,以及raise和assert关键字在异常处理中的应用。
:错误和异常&spm=1001.2101.3001.5002&articleId=134863047&d=1&t=3&u=edda29fa315a467db4e0d661c9ad6efc)
1164

被折叠的 条评论
为什么被折叠?



