执行时检测到的错误称为异常,异常不一定导致严重的后果:很快我们就能学会如何处理 Python 的异常。大多数异常不会被程序处理,而是显示下列错误信息:
>>>10*(1/0)Traceback (most recent call last): File"", line1, inZeroDivisionError:division by zero>>>4+spam*3Traceback (most recent call last): File"", line1, inNameError:name 'spam' is not defined>>>'2'+2Traceback (most recent call last): File"", line1, inTypeError:Can't convert 'int' object to str implicitly
错误信息的最后一行说明程序遇到了什么类型的错误。异常有不同的类型,而类型名称会作为错误信息的一部分中打印出来:上述示例中的异常类型依次是:ZeroDivisionError,NameError和TypeError。作为异常类型打印的字符串是发生的内置异常的名称。对于所有内置异常都是如此,但对于用户定义的异常则不一定如此(虽然这种规范很有用)。标准的异常类型是内置的标识符(不是保留关键字)。
此行其余部分根据异常类型,结合出错原因,说明错误细节。
错误信息开头用堆栈回溯形式展示发生异常的语境。一般会列出源代码行的堆栈回溯;但不会显示从标准输入读取的行。
内置异常 列出了内置异常及其含义。
8.3.处理异常¶
可以编写程序处理选定的异常。下例会要求用户一直输入内容,直到输入有效的整数,但允许用户中断程序(使用Control-C或操作系统支持的其他操作);注意,用户中断程序会触发KeyboardInterrupt异常。
>>>whileTrue:...try:...x=int(input("Please enter a number: "))...break...exceptValueError:...print("Oops! That was no valid number. Try again...")...
try语句的工作原理如下:
首先,执行t