Python编程的10个经典错误及解决办法
接触了很多Python爱好者,有初学者,亦有转行人。不论大家学习Python的目的是什么,总之,学习Python前期写出来的代码不报错就是极好的。下面,严小样儿为大家罗列出Python3十大经典错误及解决办法,供大家学习。
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789

一、 SyntaxError 语法错误
(1)引号没有成对出现
报错信息:
SyntaxError:EOL while scanning string literal
错误示例:
string = 'hello world
解决方法:
字符串切记要放在引号中,单引号双引号无所谓。当一个字符串中包含单引号或双引号时,很容易出现引号不配对的情况。
(2)圆括号没有成对出现
报错信息:
SyntaxError:unexpected EOF while parsing
错误示例1:
result = (1024+(512*2)/128
错误示例2:
print('hello world'
解决方法:
使圆括号成对出现。在书写复杂的表达式或调用函数时会经常遇到这个问题。
(3)错误使用自操作运算符++或--等
报错信息:
SyntaxError:invalid syntax
错误示例:
v = 64
v++
解决方法:
在Python语言中,没有类似C语言的++或--等自操作运算符。与之类似功能的用法是+=或-=运算符。例如,使用下面的代码进行让变量v进行自增1的操作。
- v += 1
(4)试图使用等号(=)判断两个运算量是否相等
报错信息:
SyntaxError:invalid syntax
错误示例:
if v=64:2
print('hello world')
解决方法:
在Python语言中使用两个等号(==)作为判断两个运算量是否相等的关系运算符,而等号(=)是赋值运算符。
(6)错误使用Python语言关键字作为变量名
报错信息:
SyntaxError: can`t assign to keyword
错误示例:
False= 1
解决方法:
不要使用Python语言关键字作为变量名、函数名或类名等。在Python Shell窗口中,使用help('keywords')指令可以查看Python语言的关键字列表。
(7)忘记在if/elif/else/while/for/def/class等语句末尾添加冒号(:)
报错信息:
SyntaxError:invalid syntax
错误示例1:
a = '12345'
for i in a
print(i)
错误示例2:
def sayhi()
print('Hi')
解决方法:
在if/elif/else/while/for/def/class等语句末尾添加冒号(:)即可。牢记语法规则,多多练习多多敲代码。
(8)错误地使用了中文标点符号
报错信息:
SyntaxError: invalid character in identifier
错误示例1:
print('hello','world')
# 错误原因:逗号是中文标点符号
错误示例2:
for i in range(10):
# 错误原因:冒号是中文标点符号
解决方法:
除了字符串中可以有中文外,其它任何情况均使用英文状态进行编辑。
二、 IndentationError 缩进错误报错信息:
IndentationError:unindent does not match any outer indentation level
IndentationError:expected an indented block
错误示例:
a = 2
while a < 0:
print('hello')
a -= 1
else:
print('0.0')
解决方法:
上述代码中while语句体内的代码缩进没有对齐。正确使用缩进排版代码。当代码是从其它地方复制并粘贴过来的时候,这个错误较多见。
三、 NameError 名字错误
当变量名、函数名或类名等书写错误,或者函数在定义之前就被调用等情况下,就会导致名字错误。报错信息:
NameError: name 'pirnt' is not defined
NameError: name 'sayhi' is not defined
NameError: name 'pd' is not defined
错误示例1:
pirnt('hello world')
# 错误原因:print拼写错误。
错误示例2:
sayhi()
def sayhi():
pass
# 错误原因:在函数定义之前对函数进行调用。
错误示例3:
pd.read_excel(r'file.xlsx')
# 错误原因:在调用pandas方法前并未导入pandas库或者并未起别名为pd。
解决方法:
正确书写变量名、函数名或类名等,在使用变量前先进行赋值,将函数的定义放在函数调用之前,在使用第三方库前先进行导入、调包等等。即保证某个名字(标识符)先存在,才能被使用。
四、 TypeError 类型错误
(1)整数和字符串不能进行连接操作
报错信息:
TypeError: Can`t convert 'int' object to str implicitly
TypeError: unsupported operand type(s) for + : 'float' and 'str'
错误示例1:
print('score:'+100)
错误示例2:
print(9.8 + 'seconds')
解决方法:
在整数、浮点数或布尔值与字符串进行连接操作之前,先使用str()函数将其转换为字符串类型。
(2)调用函数时参数的个数不正确,或者未传递参数
报错信息:
TypeError: input expected at most 1 arguments,got 2
TypeError: say() missing 1 required positional argument:'words'
错误示例1:
input('输入姓名','年龄')
# 错误原因:试图给input()函数提供第2个参数。
错误示例2:
def say(words):
print(words)
say()
# 错误原因:调用函数时未传递参数。
解决方法:
记住函数用法,了解函数的参数定义,使用正确的方法调用函数即可。
五、 KeyError 键错误
使用不存在的键名访问字典中的元素,就会发生这个错误。报错信息:
KeyError: 'c'
错误示例:
d = {'a':1,'b':2}
print(d['c'])
解决方法:
在访问字典中的元素时,先用in关键字检测要访问的键名是否存在,或者是使用字典和get()方法安全地访问字典元素。
六、 IndexError 索引错误
当访问列表的索引超出列表范围时,就会出现索引错误。报错信息:
IndexError: list index out of range
错误示例:
a = [1,2,3]
print(a[3])
# 错误原因:列表a中不存在第4个索引。列表的索引从0开始编号。
解决方法:
通过len()函数获取列表的长度,然后判断要访问的索引是否超出列表范围。
七、 UNboundLocalError 未初始化本地变量错误
在函数中,如果对未声明的全局变量进行修改操作,将会遇到这个错误。报错信息:
UnboundLocalError: local variable 's' referenced before assignment
错误示例:
s = 1
def test():
s += 1
print(s)
test()
# 错误原因:在函数内对未声明的全局变量s进行了自增操作。
# Python将变量s视为一个本地的局部变量,但该变量未初始化。
解决方法:
在函数内使用全局变量时,使用global关键字对其进行声明即可。
八、 AttributeError 属性错误
报错信息:
AttributeError: 'tuple' object has no attribute 'append'
AttributeError: 'DataFrame' object has no attribute 'col'
错误示例1:
t = (1,2,3)
t.append(4)
# 错误原因:元祖不可变。
错误示例2:
df = pd.read_excel(r'data.xlsx')
df.col
# 错误原因:DataFrame没有col属性,应该为columns。
解决方法:
正确书写类的属性名,不要发生书写错误。深刻理解元祖,列表的区别,可将元祖转换为列表添加元素。
九、 ModuleNotFoundError 模块不存在
报错信息:
ModuleNotFoundError: No module named 'pandas'
错误示例1:
import pandas as pd
# 没有导入成功,报上面错误。
解决方法:
这种报错常见于两种场景中,第一、未下载、安装该模块;第二、将调用的模块路径与被调用的模块路径不一致等。第一种情况直接下载安装即可,在cmd中,pip install xxx;第二种情况电脑中可能存在多个版本的Python,建议保留一个常用的即可。
十、 FileNotFoundError 文件不存在
报错信息:
FileNotFoundError: File b'E:\test\test_data.csv' does not exist
错误示例:
pd.read_csv('E:\test\test_data.csv')
# 错误原因:路径中包含'\t',系统错误地认为是制表符。
解决方法:
在确保该路径下确实存在所写文件后,在读取文件路径前面加'r',表示只读,作为文件路径读取;或者使用双斜杠'\ \'来进行转义,形如:'E:\ \test\ \test_data.csv'。偶尔也会发生文件名、路径的确写错,犯一些低级错误。
结束语
报错,并不可怕,那是一个学习的机会。现在搜索引擎这么发达,只要把错误信息放进去,一搜就出来了各种解决之道。
Python编程的10个经典错误及解决办法的更多相关文章
- 四十八:数据库之alembic常用命令和经典错误的解决办法
常用命令:1.init:创建一个alembic仓库2.reversion:创建一个新的版本3.--autogenerate:自动将当前模型的修改,生成迁移脚本4.-m:message,可以记录本次迁移 ...
- Python: 编程遇到的一些问题以及网上解决办法?
0.Python: TypeError: 'str' does not support the buffer interface,(点我) fp.write(url.encode("utf- ...
- python编程中的一个经典错误之list引用
请看下面代码 class User: def __init__(self, name, hobby=[]): self.name = name self.hobby = hobby def add_h ...
- python文件读取:遇见的错误及解决办法
问题一: TypeError: 'str' object is not callable 产生原因: 该错误TypeError: 'str' object is not callable字面上意思:就 ...
- Android编程学习过程中遇到的错误以及解决办法
Android Studio遇到的问题 Android Studio一直提示右下角那个错误,Failed to open zip file.我是根据这位大佬的博客https://www.cnblogs ...
- 关于Python打开IDLE出现错误的解决办法
安装好python,打开IDLE出现以下错误: 解决办法: 修改[Python目录]\Lib\idlelib\PyShell.py文件,在1300行附近,将def main():函数下面use_sub ...
- VS2010出现FileTracker : error FTK1011编译错误的解决办法
VS2010出现FileTracker : error FTK1011不知道是不是vs2010的一个bug,反正有人提交了. FileTracker : error FTK1011编译错误的解决办法有 ...
- Oracle的常见错误及解决办法
ORA-12528: TNS:listener: all appropriate instances are blocking new connections ORA-12528问题是因为监听中的服务 ...
- WCF服务部署到IIS上,然后通过web服务引用方式出现错误的解决办法
本文转载:http://www.cnblogs.com/shenba/archive/2012/01/06/2313932.html 昨天在用IIS部署一个WCF服务时,碰到了如下错误: 理解了文档内 ...
随机推荐
- 数据可视化之 图表篇(四) 那些精美的Power BI可视化图表
之前使用自定义图表,每次新打开一个新文件时,都需要重新添加,无法保存,在PowerBI 6月更新中,这个功能得到了很大改善,可以将自定义的图表固定在内置图表面板上了. 添加自定义图表后,右键>固 ...
- python之爬虫(十) Selenium库的使用
一.什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行 ...
- HTML学习分享二
一 . 常用快捷键 ctrl + s : 保存 ctrl + x.ctrl + c.ctrl + v : 剪切.复制.粘贴 ctrl + a : 全选 sh ...
- jupyter中%matplotlib inline报错
学习matplotlib时,使用的jupyter跑代码.报错如上图.大致就是后面的注释不能被识别.我寻思着注释不用识别吧,大概是因为%后跟的语句被全部当成命令行执行了,然后命令行不识别行内注释,导致报 ...
- tineMCE 踩坑:images_upload_handler
tineMCE 的官方示例提供了前端上传图片方法 images_upload_handler 的写法. 但官方写的有点问题,上传会报错. 不过修改也很简单: images_upload_handler ...
- Azure Traffic Manager(二) 基于权重与基于优先级的路由策略为我们的Web项目提供负载均衡
一,引言 上一片文章我们使用 Azure Traffic Manager 分发用户请求,同时演示了两种路由策略,“Performance”,“Geographic”的两种方式,今天我们继续讲解 Tra ...
- 五分钟快速搭建 Serverless 免费邮件服务
1. 引言 本文将带你快速基于 Azure Function 和 SendGrid 构建一个免费的Serverless(无服务器)的邮件发送服务,让你感受下Serverless的强大之处. 该服务可以 ...
- The option-critic architecture
Abstract 时间抽象是强化学习中扩大学习和规划的关键.虽然计划与时间扩展的行动是众所周知的,但从数据中自主地创建这样的抽象仍然具有挑战性.我们在option框架内解决这个问题[Sutton,Pr ...
- Azure Load Balancer(一) 为我们的Web项目提供负载均衡
一,引言 上节,我们讲到使用 Azure Traffic Manager 为我们的 Demo 项目提供负载均衡,以及流量转发的功能.但是Azure 提供类似的功能的服务远远不止这一个,今天我们就来讲一 ...
- 蜻蜓点水说说Redis的String的奥秘
本篇博客参考:掘金Redis小册 敖丙 如果面试官问你,单线程的Redis为什么那么快,你可能脱口而出,因为单线程,避免上下文切换:因为基于内存,比硬盘读写快很多:因为采用的是多路复用网络模型.不管你 ...