在Python代码中,如果出现了错误和异常,会出现Tracebacks,这个可以翻译为“追朔”。

在《跟老齐学Python:轻松入门》第五章错误和异常的5.2节中,有如下操作:

>>> 1 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

这里所显示的Traceback就是对异常的追朔。

Python中常见的追朔类型有:

  • SyntaxError
  • ImportError 或 ModuleNotFoundError
  • AttributeError
  • NameError

如果出现了上述异常,就会显示相应的追朔内容。

Syntax Error(语法错误)

代码中语法错误是难免的,除非你很仔细。

>>> print('Learn Python with Laoqi)
  File "<stdin>", line 1
    print('Learn Python with Laoqi)
                                  ^
SyntaxError: EOL while scanning string literal

如果出现的异常和错误,一定要注意阅读提示。上面的提示中就告诉了错误在于EOL(End of Line),即没有写字符串符号的后半部分。

在Syntax Error中,常常用^符号表示出错误的出现位置,供修改参考。

Import Error

在Python编程中,引入模块是经常的事情,当时,如果模块不存在的话,就报Import Error信息了。

>>> import Laoqi
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'Laoqi'

这里显示的是ModuleNotFoundError,事实上,ModuleNotFoundError是ImportError类的子类。

遇到这种情况,一般解决方法就是要使用pip来安装所引入的包或模块(具体的pip使用方法请见本书)

AttributeError

姑且翻译成“属性异常(错误)”,意思是当访问某个对象的属性和方法的时候,该属性或方法不存在,则报此错误。

>>> book = "Learn Python with Laoqi"
>>> book.up()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'up'

字符串对象没有up方法,并且在提示中显示了此信息。

如何知道某对象向有哪些属性和方法?具体请参阅本书(《跟老齐学Python:轻松入门》)中的讲述。书中从始至终都贯穿了一个思想和操作,就是要学会如何学习Python,其中重点阐述了一种方法,用它解决AttributeError问题。

NameError

Python中变量具有其独有特征,在书中已经阐述清楚,所以,如下操作会报错。

>>> laoqi
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'laoqi' is not defined

出现上述错误,是没有理解变量和对象的关系。请参阅本书的1.1节有关说明。

以上列举了常见的异常,在开发中,遇到错误很正常。请务必要认真阅读追朔信息,帮助排除错误和异常。