2.异常
2.1处理 ZeroDivisionError异常
下面来看一种导致 Pyton引发异常的简单错误。你可能知道,不能用数除以0,但还是让Python这样做。
print(5/0)
ZeroDivisionError是个异常对象。当Python 无法按你的要求做时,就会创建这种对象。在这种情况下,Python将停止运行程序,并指出引发了哪种异常,而我们可根据这些信息对程序进行修改。下面来告诉Python,发生这种错误时怎么办。这样,如果再次发生此类错误,我们瞬间就能了解错误的原因。
2.2处理 FileNotFoundError异常
在使用文件时,一种常见的问题是找不到文件:,查找的文件可能在其他地方,文件名可能不正确、或者这个文件根本就不存在。对于所有这些情形,都可使用try-except 代码块以直观的方式处理。我们来尝试读取一个不存在的文件。下面的程序尝试读取文件的内容,但该文件没有存储在文件所在的目录中。
filename = 'yzy.txt'
with open(filename,encoding='utf-8') as f:
content = f.read()
相比于本章前面的文件打开方式,这里有两个不同之处。一是使用变量f来表示文件对象,这是一种常见的做法。二是给参数encoding指定了值,在系统的默认编码与要读取文件使用的编码不一致时,必须这样做。
Python无法读取不存在的文件,因此它引发-个异常: 通过将可能引发错误的代码放在try except化码块中,可提高程序抵御错误的重大,还是执行除法运算的代码行导致的,因此需要将它放到try- except代码块中。这个示例还包含一个else代码块。依赖try代码块成功执行的代码都应放到else代码块中,让Python尝试执行try代码块中的除法运算,这个代码块只包含可能导致错误的代码。依赖try代码块成功执行的代码都放在else代码块中。在本例中,如果除法运算成功,就使用else代码块来打印结果。
except 代码块告诉Python,出现ZeroDivisionError异常时该如何办。如果try代码块因除零错误而失败,就打印一条友好的消息,告诉用户如何避免这种错误。程序继续运行,用户根本看不到traceback。
2.3使用 try-except 代码块
当你认为可能会发生错误时,可编写一个try-except 代码块来处理可能引发的异常。你让Python尝试运行一些代码, 并告诉它如果这些代码引发了指定的异常该怎么办
处理ZeroDivisionError异常的try-except代码块类似于下面这样:
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")
将导致错误的代码行print(5/0)放在一个 try代码块中。如果try代码块中的代码运行起来没有问题,Python 将跳过except 代码块;如果try代码块中的代码导致了错误,Python 将查找到与之匹配的except代码块并运行其中的代码。
在本例中,try代码块中的代码引发了ZeroDivisionError 异常,因此Python查找指出了该怎么办的except代码块,并运行其中的代码。这样,用户看到的是一条友好的错误消息, 而不是traceback:You can't divide by zero!
如果try-except 代码块后面还有其他代码,程序将接着运行,因为已经告诉了Python如何处理这种错误。
2.4 else代码块
通过将可能引发错误的代码放在try-except代码块中,可提高程序抵御错误的能力。错误是执行除法运算的代码行导致的,因此需要将它放到try-except 代码块中。这个示例还包含一个else代码块。依赖try 代码块成功执行的代码都应放到else代码块中:
try:
except ZeroDivisionError:
print('no divide 0')
else:
print('answer')
让Python尝试执行try代码块中的除法运算,这个代码块只包含可能导致错误的代码。依赖try代码块成功执行的代码都放在else代码块中。在本例中,如果除法运算成功,就使用else代码块来打印结果。
except代码块告诉Python,出现ZeroDivisionError异常时该如何办。如果try代码块因除零错误而失败,就打印一条友好的消息,告诉用户如何避免这种错误。程序继续运行,用户根本看不到traceback。
try-except-else代码块的工作原理大致如下。Python 尝试执行try代码块中的代码,只有
可能引发异常的代码才需要放在try语句中。有时候,有一些仅在try代码块成功执行时才需要运行的代码,这些代码应放在else代码块中。except代码块告诉Python,如果尝试运行try代码块中的代码时引发了指定的异常该怎么办。