对于初学Python的朋友来说,运行代码总会遇到种种报错,不免烦躁慌乱,总觉得是哪里出了大问题,其实大家不必紧张,针对这些常见的错误类型,我们专门整理了今天这篇文章分享给大家,希望大家能够正确的看待报错,按照提示能够找到错误类型和解决思路。
1、有错误才是正常的
在程序员的日常工作中,错误几乎每次调试都在发生,例如我们会在输入代码时不小心漏掉或者错误的输入一个标点,就会造成计算机无法准确理解代码的含义。因此在我们大段大段的输入代码时,“笔误”是不可避免的。遇到错误提示无需担心,绝大多数都是可以通过仔细调试来解决的。
程序员们为了更方便快速的找到发生的问题,大多数编程语言都会在编译器执行程序时加入错误诊断,一旦程序出现错误或者潜在的风险,程序就会被中断执行,并且反馈一个“错误信息”或者“警告信息”提供给编程人员参考。
但是这种错误信息提示,仅仅能帮助我们判断一个大概的错误类型和有可能的错误位置,并不能每次都可以百分百的提示准确,但可以为我们检查代码提供关注焦点。下面我们就来总结一下在Python中经常遇到的一些错误提示。
2、初学Python常见的错误
先强调一下刚接触Python编程的朋友最常见的一个错误,大家请小心避免:
不要使用中文标点。 括号,引号任何时候都要成对引用。
不要使用中文标点。 括号,引号任何时候都要成对引用。
不要使用中文标点。 括号,引号任何时候都要成对引用。
解决方案:如果觉得自己不是一个特别心思细腻的人,强烈建议不要用搜狗拼音输入法写代码,直接切换成英文输入法
出现了一个错误看不懂提示怎么办?!不要惊慌,这是每个写代码的程序猿都在时时刻刻面对的正常问题。
复制完整的错误提示,百度一下,你不是一个人在犯错。
复制完整的错误提示,百度一下,你不是一个人在犯错 。
复制完整的错误提示,百度一下,你不是一个人在犯错。
遇到我们看不懂的错误提示,首先应该对照我们下面列举的常见错误进行检查,如果发现都不是这些错误,那么可以复制完整的错误信息,在百度进行检索。
通常我们会看到很多人都会犯类似的错误,看看大家的解决方案,一定有一个可以解决你的问题。
遇到错误,对于我们初学者来说不必记清楚每个错误提示要怎么解决,利用网络和搜索引擎,大多数问题可以迎刃而解。
下面开始我们正式列举一些常见的错误。
SyntaxError 类型的错误,
例如SyntaxError: invalid syntax #无效的语法
SyntaxError: invalid character in identifier #标识符中存在无效字符
这个错误是提示我们语法错误或者代码形式错误。例如我们在使用 if、elif、else、for、while、class、def 语句后面忘记添加 “:”
又或者我们在代码中不小心使用了中文标点,例如中文的句号,冒号,括号。
还有一种可能是我们使用了Python中的关键字作为了变量名。Python3标准库中有33个关键字,我们在使用类名、函数名、变量名的时候要注意避开,关键字如下:
'False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'
遇到此类型的错误提示,我们要做的就是检查提示位置的拼写、语法、标点、是否变量名占用关键字等。
IndentationError 类型的错误,
例如IndentationError: expected an indented block #缩进错误,没有正确的对齐,例如IF语句:后面没有使用缩进
IndentationError: unexpected indent #同一个代码块中的每行代码都必须保持一致的缩进量
IndentationError: unindent does not match any outer indentation level #没有可以匹配的外部无缩进级别。例如代码块结束之后缩进没有恢复到原来的位置
在Python中我们需要严格进行代码缩进,具有相同缩进的代码被视为一个代码块。
对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行需要进行缩进,表示下一个代码块的开始,缩进的结束则表示此代码块的结束。
如果没有进行正确的缩进和取消缩进,则会出现这个类型的错误。
NameError 类型的错误,
例如NameError: name 'XXX' is not defined #XXX没有进行定义
b = 0
print (a)
例如这段代码中变量a没有被定义,却在打印语句中想要输出a变量,就会报这个错误。
而更常见的情况是我们将变量、函数名或者关键字拼写错误,尤其是大小写的错误。由于错误的拼写导致编译器找不到这个名称,所以同样会提示没有定义的错误。
TypeError 类型的错误,
例如TypeError: '<'not supported between instances of 'str'and'int' # str实例和int实例之间不支持'<'操作
TypeError: 'str' object does not support item assignment # str实例不支持或不能分配给item类型
这个错误通常是提示传入对象的类型与要求的不符合。
例如字符串一个序列对象,支持用索引获取元素,但它和列表对象不同,字符串是不可变对象,不支持修改。
如下面代码想要把字符串的第13个字符改成r,就会出现此类错误。
a = 'I have a pet cat.'
a[13] = 'r'
print (spam)
3、更多的错误总结
下面是一个更多的错误总结表格,作为初学者,我们无需记住众多的错误类型,遇到异常和错误时,我们要擅长使用网络搜索引擎来解决问题,可以将整行的错误提示复制,在百度中进行搜索,参考大家常用的解决方案,这也是进行错误检查的一个重要方法。
异常名 | 解释 |
---|---|
IOError | 输入输出异常 |
AttributeError | 试图访问一个对象没有的属性 |
ImportError | 无法引入模块或包,基本是路径问题 |
IndentationError | 语法错误,代码没有正确的对齐 |
IndexError | 下标索引超出序列边界 |
KeyError | 试图访问你字典里不存在的键 |
SyntaxError | Python代码逻辑语法出错,不能执行 |
NameError | 使用一个还未赋予对象的变量 |
KeyboardInterrupt | Ctrl+C被按下,键盘终止输入 |
UnboundLocalError | 试图访问一个还未被设置的局部变量 |
ValueError | 传入一个调用者不期望的值,即使值的类型是正确的 |
OSError | 操作系统执行错误 |
TypeError | 传入对象的类型与要求的不符合 |