在Python中,异常是程序执行期间发生的错误或意外情况。当解释器遇到异常时,会停止程序的正常执行,并在控制台输出异常的相关信息。
Python中有许多不同的异常类型,每个异常类型表示不同的错误或意外情况。 下面是一些常见的Python异常类型及其说明:
- AssertionError:断言语句(assert)失败
- AttributeError:尝试访问一个对象没有的属性
- EOFError:没有内建输入,到达了EOF标记
- Exception:常规错误的基类
- ImportError:导入模块失败的时候触发
- IndexError:索引超出序列的范围
- KeyError:字典中查找一个不存在的关键字
- KeyboardInterrupt:用户中断执行
- MemoryError:内存溢出(可通过删除对象释放内存)
- NameError:尝试访问一个不存在的变量
- OSError:操作系统产生的异常(例如打开一个不存在的文件)
- OverflowError:数值运算超出最大限制
- RecursionError:超出最大递归深度
- RuntimeError:一般的运行时错误
- StopIteration:迭代器没有更多的值
- SyntaxError:Python语法错误
- IndentationError:缩进错误
- TabError:Tab和空格混用
- SystemError:Python编译器系统错误
- SystemExit:Python编译器进程被关闭
- TypeError:不同类型间的无效操作
- UnboundLocalError:访问未初始化的本地变量
- UnicodeError:Unicode相关的异常
- ValueError:不同类型间的无效操作
- ZeroDivisionError:除数为零
接下来我们将给出不同异常的触发代码示例
AssertionError:断言语句(assert)失败。
触发代码:
assert 1 == 2, "1 不等于 2"
AttributeError:尝试访问一个对象没有的属性。
触发代码:
class MyClass: attr = 123 m = MyClass() print(m.nonexistent_attr)
EOFError:没有内建输入,到达了EOF标记。
触发代码:
input() # 通过键盘输入一些字符,然后按下 Ctrl-Z(Windows)或 Ctrl-D(Unix/Linux)即可触发
ImportError:导入模块失败的时候触发。
触发代码:
import nonexistent_module
IndexError:索引超出序列的范围。
触发代码:
lst = [1, 2, 3] print(lst[3])
KeyError:字典中查找一个不存在的关键字。
触发代码:
d = {'a': 1, 'b': 2} print(d['c'])
KeyboardInterrupt:用户中断执行。
触发代码:在程序执行过程中按下 Ctrl-C。
MemoryError:内存溢出(可通过删除对象释放内存)。
触发代码:
lst = [1] * 1024 ** 3 # 创建一个长度为 1GB 的列表
NameError:尝试访问一个不存在的变量。
触发代码:
print(nonexistent_var)
NotImplementedError:尝试调用一个抽象方法,但是子类没有重写它。
触发代码:
from abc import ABC, abstractmethod class MyBaseClass(ABC): @abstractmethod def my_abstract_method(self): pass class MySubClass(MyBaseClass): pass obj = MySubClass() obj.my_abstract_method()
OSError:操作系统产生的异常(例如打开一个不存在的文件)。
触发代码:
with open("nonexistent_file.txt", "r") as f: pass
OverflowError:数值运算超出最大限制。
触发代码:
print(2 ** 1000000)
RecursionError:超出最大递归深度。
触发代码:
def my_func(): my_func() my_func()
RuntimeError:一般的运行时错误。
触发代码:
raise RuntimeError("My runtime error")
StopIteration:迭代器没有更多的值。
触发代码:
my_iter = iter([1, 2, 3]) print(next(my_iter)) print(next(my_iter)) print(next(my_iter)) print(next(my_iter))
SyntaxError:Python语法错误。
触发代码:
eval("1 + ")
IndentationError:缩进错误。
触发代码:
if True: print("Hello, world!")
TabError:Tab和空格混用。
触发代码:
def my_func(): if True: print("Hello, world!") # 上面这一行的前面有一个 Tab 和一个空格,会触发 TabError
SystemError:Python编译器系统错误。
触发代码:
import sys sys._getframe(-1)
SystemExit:Python编译器进程被关闭。
触发代码:
import sys sys._getframe(-1)
TypeError:不同类型间的无效操作。
触发代码:
print(1 + "2")
UnboundLocalError:访问未初始化的本地变量。
触发代码:
def my_func(): print(x) x = 1 my_func()
UnicodeError:Unicode相关的异常。
触发代码:
s = "\u203D" s.encode("ascii")
ValueError:传入参数的类型正确但是值错误。
触发代码:
int("abc")
ZeroDivisionError:除数为零。
触发代码:
print(1 / 0)
以上是Python中所有标准异常类型及其解释以及触发代码。开发过程中需要根据具体情况选择处理异常,并使用try-except语句来捕获并处理异常,从而保证程序的健壮性和稳定性。