Python常遇到的错误和异常

1. 异常和错误的概念

在使用Python进行程序开发时,避免不了会遇到一些错误和异常,下面来了解一下这两个概念的区别。

错误是程序在编译或运行时的语法错误或逻辑错误,无法通过检查或测试发现,会使程序直接停止执行。

#示例一:语法错误

print('Hello, World!')

print 'We love Python!'

上面的代码中,第二行语句在Python3中应该使用括号,因此在运行时会报出语法错误信息:

File "test.py", line 2

print 'We love Python!'

^

SyntaxError: invalid syntax

异常是指程序在运行时的不正常状态,比如尝试除以0、引用不存在的对象、文件无法打开等。异常可以被预见和处理。

#示例二:除数为0的异常

a = 10

b = 0

print(a/b)

上面的代码中,第三行语句会尝试计算10除以0,这时会抛出异常:

Traceback (most recent call last):

File "test.py", line 3, in

print(a/b)

ZeroDivisionError: division by zero

2. 常见异常类型

2.1 NameError

NameError是指在Python中未定义的变量或函数名。

#示例三:名称错误

a = 10

print(a + b)

上面的代码中,变量b没有定义,因此会抛出NameError异常:

Traceback (most recent call last):

File "test.py", line 2, in

print(a + b)

NameError: name 'b' is not defined

2.2 TypeError

TypeError是指尝试把一个数据类型用于不合适的操作时引发的异常,比如把字符串和数字相加、把列表和字典相加等。

#示例四:类型错误

a = 'hello '

b = 10

print(a + b)

上面的代码中,第三行语句尝试将字符串和数字相加,这时会抛出TypeError异常:

Traceback (most recent call last):

File "test.py", line 3, in

print(a + b)

TypeError: can only concatenate str (not "int") to str

2.3 IndexError

IndexError是指访问一个不存在的索引时引发的异常,比如访问列表中一个不存在的元素。

#示例五:索引错误

a = [1, 2, 3]

print(a[3])

上面的代码中,第二行语句尝试访问第4个元素,而列表中只有3个元素,因此会抛出IndexError异常:

Traceback (most recent call last):

File "test.py", line 2, in

print(a[3])

IndexError: list index out of range

2.4 KeyError

KeyError是指在字典中查找一个不存在的键时引发的异常。

#示例六:键错误

a = {'a': 1, 'b': 2, 'c': 3}

print(a['d'])

上面的代码中,第二行语句尝试查找键'd'的值,而字典中没有这个键,因此会抛出KeyError异常:

Traceback (most recent call last):

File "test.py", line 2, in

print(a['d'])

KeyError: 'd'

3. 异常处理

在Python中可以使用try...except语句来处理在程序运行时可能发生的异常。

try:

n = int(input('请输入一个整数:'))

print(100 / n)

except ValueError:

print('输入错误,需要输入整数')

except ZeroDivisionError:

print('除数不能为0')

上面的代码中,try语句块尝试获取用户输入并计算结果,如果出现ValueError或ZeroDivisionError异常,则在except语句中处理。

一般情况下,不建议使用通配符异常处理,而应通过具体的异常类型来判断和处理:

try:

#执行代码块

except Exception as e:

#处理异常

因为使用通配符异常处理不利于发现和解决问题,可以使用Python提供的多个异常类型来分别进行处理。

4. 自定义异常类

除了使用Python提供的异常类型,还可以自定义异常类来进行异常处理。

class MyException(Exception):

pass

try:

raise MyException('这是我的自定义异常')

except MyException as e:

print(e)

上面的代码中,定义了一个名为MyException的异常类,然后使用raise语句抛出异常,最后在except语句中进行异常处理。

5. 总结

Python中的错误和异常是程序开发过程中不可避免的问题,了解常见的异常类型并正确处理异常是保证程序质量的重要保障。

后端开发标签