接触了众多Python爱好者,包括初学者和转行者。不管你学习Python的目的是什么,总之,学习Python初期写的代码不报错就是极好的。下面,严晓阳将列出Python3的十大经典错误及其解决方法,供大家学习。1.SyntaxError语法错误(1)引号没有配对,出现错误信息:SyntaxError:EOLwhilescanningstringliteral错误示例:string='helloworld解决方法:记得把字符串放在引号里,单引号和双引号引号无关紧要。当字符串包含单引号或双引号时,很容易得到不匹配的引号。(2)括号不成对出现错误信息:SyntaxError:unexpectedEOFwhileparsingError示例一:result=(1024+(512*2)/128错误示例二:print('helloworld'解决方法:使括号成对出现。这个问题在写复杂的表达式或者调用函数的时候经常会遇到(3)误用自运算符++或者--等错误信息:SyntaxError:invalidsyntax错误示例:v=64v++解决方法:在Python语言中,C语言中没有++或--这样的自运算符,类似函数的用法是+=或-=运算符。例如使用下面的代码使变量v自增1。v+=1(4)尝试用等号(=)判断两个操作数是否相等报错信息:SyntaxError:invalidsyntax错误示例:ifv=64:2print('helloworld')解决方法:在Python语言中使用两个等号(==)作为判断两个操作数是否相等的关系运算符,equal符号(=)是赋值运算符。(5)Python语言关键字作为变量名时报错:SyntaxError:can`tassigntokeyword错误示例:False=1解决方法:不要使用Python语言关键字作为变量名、函数名、类名,等在PythonShell窗口中,使用help('keywords')命令查看Python语言的关键字列表。(6)忘记在if/elif/else/while/for/def/class等结尾加冒号(:)报错信息:SyntaxError:invalidsyntax错误示例1:a='12345'foriinaprint(i)错误示例2:defsayhi()print('Hi')解决方法:在if/elif/else/while/for/def/class等语句的末尾添加冒号(:)。牢记语法规则,多练习,多敲代码。(7)中文标点错误使用错误信息:SyntaxError:invalidcharacterinidentifier错误示例1:print('hello','world')#error原因:commaisChinesepunctuation错误示例2:foriinrange(10):#error原因:The冒号是中文标点符号。解决方法:除字符串中可以有中文外,其他情况都使用英文状态进行编辑。2.IndentationError缩进错误报错信息:IndentationError:unindentdoesnotmatchanyouterindentationlevelIndentationError:expectedanindentedblock错误示例:a=2whilea<0:print('hello')a-=1else:print('0.0')解决方法:在while语句的body中上面的代码代码缩进没有对齐。正确使用缩进排版代码。当从其他地方复制和粘贴代码时,此错误更为常见。3.NameError名称错误当变量名、函数名或类名写错,或者函数在定义之前被调用等等,都会导致名称错误。错误信息:NameError:name'pirnt'isnotdefinedNameError:name'sayhi'isnotdefinedNameError:name'pd'isnotdefinedError示例一:pirnt('helloworld')#错误原因:print拼写错误。错误示例2:sayhi()defsayhi():pass#错误原因:在函数定义之前调用了函数。错误示例3:pd.read_excel(r'file.xlsx')#错误原因:调用pandas方法前没有导入pandas库或者别名没有命名为pd。解决方法:正确书写变量名、函数名或类名等,在使用变量前赋值??,在函数调用前放置函数定义,在使用第三方库前导入、切换包等。即保证一个名称(标识符)存在后才能使用。4.TypeError类型错误(1)Integer和string无法连接。报错信息:TypeError:Can`tconvert'int'objecttostrimplicitlyTypeError:unsupportedoperandtype(s)for+:'float'and'str'错误示例一:print('score:'+100)错误示例二:print(9.8+'seconds')解决方法:使用str()函数将整数、浮点数或布尔值转换为字符串后再与字符串拼接。(2)调用函数时参数个数不正确,或者不传参数报错:TypeError:inputexpectedatmost1arguments,got2TypeError:say()missing1requiredpositionalargument:'words'错误示例1:input('inputname','age')#错误原因:尝试向input()函数提供第二个参数。错误示例2:defsay(words):print(words)say()#错误原因:调用函数时没有传递参数。解决方法:记住函数的用法,理解函数的参数定义,使用正确的方法调用函数。5.KeyError键错误如果使用不存在的键名访问字典中的元素,就会出现此错误。报错信息:KeyError:'c'错误示例:d={'a':1,'b':2}print(d['c'])解决方法:在访问字典中的元素时,先使用in键检查要访问的键名是否存在,或者使用字典和get()方法安全访问字典元素。6.IndexError索引错误当访问列表的索引超出列表的范围时,会发生索引错误。错误信息:IndexError:listindexoutofrange错误示例:a=[1,2,3]print(a[3])#错误原因:lista中不存在第四个索引。列表索引从0开始编号。解决方法:通过len()函数获取列表的长度,然后判断要访问的索引是否超出列表的范围。7.UNboundLocalErroruninitializedlocalvariable错误在一个函数中,如果修改了一个未声明的全局变量,就会遇到这个错误。错误信息:UnboundLocalError:localvariable's'referencedbeforeassignment错误示例:s=1deftest():s+=1print(s)test()#错误原因:函数中未声明的全局变量s自增。#Python把变量s当做局部局部变量,但是这个变量并没有被初始化。解决方法:在函数中使用全局变量时,使用global关键字声明。8、AttributeError属性错误错误信息:AttributeError:'tuple'objecthasnoattribute'append'AttributeError:'DataFrame'objecthasnoattribute'col'错误示例1:t=(1,2,3)t.append(4)#错误原因:元祖不可变的。错误示例2:df=pd.read_excel(r'data.xlsx')df.col#错误原因:DataFrame没有col属性,应该是列。解决方法:正确写类的属性名,不要写错。深刻理解元组和列表的区别,将元组转为列表添加元素。9、ModuleNotFoundErrorModuledoesnotexist错误信息:ModuleNotFoundError:Nomodulenamed'pandas'错误示例一:importpandasaspd#Importedsuccessful,报以上错误。解决方法:这种错误经常报两种场景。一、模块尚未下载安装;第二,被调用模块的路径与被调用模块的路径不一致。第一种情况,直接下载安装即可。在cmd中,pipinstallxxx;在第二种情况下,计算机中可能存在多个版本的Python。建议保留一个常用的。10、FileNotFoundErrorThefiledoesnotexist错误信息:FileNotFoundError:Fileb'E:\test\test_data.csv'doesnotexist错误示例:pd.read_csv('E:\test\test_data.csv')#错误原因:路径包含'\t',系统误认为是制表符。解决方法:确保写入文件路径下确实存在后,在读取文件路径前加'r'表示只读,作为文件路径读取;或者使用双斜杠'\\'转义,如:'E:\\test\\test_data.csv'。偶尔确实是文件名和路径写错了,犯了一些低级的错误。结语报错并不可怕,是一次学习的机会。现在搜索引擎这么发达,只要把报错信息放进去,搜索一下就能找到各种解决办法。当然也可以找小燕燕!XiaoyanYan很乐意帮助别人发现和排查自己代码中的错误,然后告诉你正确的方法——点击“正在寻找”,点击右下角的“正在寻找”↘一次。
