常见异常

Python SELF ZH
第 17 级 , 课程 1
可用

2.1 创建异常

打不过就加入。如果我们不能避免程序中出现错误,我们就要学会控制它们。为此,让我们学会有意识地创建异常吧。

最简单的异常例子是 除以零。然后程序也是简单的:


x = 100 / 0
        

这样的代码会执行出错:


Traceback (most recent call last):
    File "", line 1, in 
         x = 100 / 0
        ~~~^~   
ZeroDivisionError: division by zero
        

ZeroDivisionError 是异常的名字,而 division by zero 是它的简短描述。同时,Python还会告诉你异常发生的代码行。

数据类型不匹配

当然,还有其他可能的异常。例如,尝试将字符串和数字相加时:


s = "100" + 100
        

会发生 TypeError 异常:


Traceback (most recent call last):
    File "", line 1, in 
TypeError: unsupported operand type(s) for +: 'str' and 'int'
        

超出列表边界

另一个非常常见的错误是尝试访问列表中不存在的元素,这会生成异常:


my_list = [1, 2, 3]
print(my_list[10])
        

这会导致 IndexError 异常:


Traceback (most recent call last):
    print(my_list[10])
        ~~~~~~~^^^^
IndexError: list index out of range
        

这样的异常有多少呢?有成千上万种不同类型的异常。而且,如果现有的异常不足以描述某种特定情况,你还可以自己创建。虽然最常见的异常并没有那么多。

2.2 常见异常列表

异常很多,但对你这样的初学者来说,了解最常见的异常会很有帮助。下面是一个表格:

异常 描述
Exception 所有异常的基类。
IndexError 当尝试访问不存在的序列(如列表或元组)的索引时,出现此异常。
KeyError 当尝试访问字典中不存在的键时,出现此异常。
NameError 当尝试访问未声明的变量时,出现此异常。
RuntimeError 发生与其他异常类型不相关的常规运行时错误时,出现此异常。
StopIteration 用于指示迭代结束的异常。
SyntaxError 当代码中有语法错误时,出现此异常。
IndentationError 当代码缩进错误时出现此异常(SyntaxError 的子类型)。
TabError 当混合使用制表符和空格进行缩进时,出现此异常(IndentationError 的子类型)。
TypeError 当尝试执行与数据类型不兼容的操作时,出现此异常。
UnboundLocalError 当在声明之前引用局部变量时,出现此异常(NameError 的子类型)。
ValueError 当向函数或操作传递具有错误值的参数时,出现此异常。
ZeroDivisionError 当执行除以零的操作时,出现此异常。

很可能,你作为新手在学习的第一个月里会遇到所有这些错误。这没什么不好的——只有通过错误才能学到东西。

2.3 代码中的错误

让我们再分析几个代码中出现错误的情况,这样你以后在代码中更容易找到它们:

IndentationError

当代码中的缩进不正确时,会出现这种类型的错误。例如,混用制表符和空格或缩进量不正确。


def example():
    print("Hello")
     print("World")  # 错误的缩进会导致 IndentationError
        
example()
        

NameError


def example():
    print(undeclared_variable)  # 尝试使用未声明的变量会导致 NameError
        
example()
        

ValueError

当操作或函数接收到一个具有正确类型但不合适值的参数时,会出现这种类型的错误。


def example():
    int("abc")  # 尝试转换非数字字符串会导致 ValueError
        
example()
        

KeyError

当程序尝试访问字典中不存在的键时,会出现这种类型的错误。


def example():
    my_dict = {"a": 1, "b": 2}
    print(my_dict["c"])  # 尝试访问不存在的键会导致 KeyError
        
example()
        

SyntaxError

当代码中存在语法错误,即代码不符合 Python 语言语法时,会出现这种类型的错误。


def example():
    eval("if True print('Hello')")  # 错误语法会导致 SyntaxError
        
example()
        

预知即预防。现在你可以识别和创建导致错误的情况。是时候学习如何处理这些错误了。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION