当前位置: 首页 > 科技观察

Python17个常见错误分析

时间:2023-03-16 15:38:57 科技观察

对于初学者来说,Pythoner在学习过程中运行代码时或多或少会遇到一些错误,一开始可能看起来很吃力。随着代码量的积累,熟能生巧。当遇到一些运行时错误时,可以快速定位到原来的问题。下面整理出17个常见错误,希望对大家有所帮助1、忘记添加:在if、for、def、elif、else、class等语句的末尾会导致“SyntaxError:invalidsyntax”如下:ifspam==42print('Hello!')2、用=代替==也会导致“SyntaxError:invalidsyntax”=是赋值运算符,==是相等比较运算。错误出现在如下代码中:ifspam=42:print('Hello!')3.错误使用缩进导致“IndentationError:unexpectedindent”、“IndentationError:unindentdoesnotmatchanyouterindetationlevel”和“IndentationError:expectedanindentedblock"请记住,缩进增加仅用于以:结尾的语句之后,并且之后必须恢复以前的缩进格式。错误出现在以下代码中:print('Hello!')print('Howdy!')或者:ifspam==42:print('Hello!')print('Howdy!')4.在for循环语句中忘记调用len()导致“TypeError:'list'objectcannotbeinterpretedasaninteger”通常你想通过索引遍历列表或字符串的元素,这需要调用range()函数。请记住返回len值而不是返回列表。错误出现在以下代码中:spam=['cat','dog','mouse']foriinrange(spam):print(spam[i])5.尝试修改字符串的值导致“TypeError:'str'objectdoesnotsupportitemassignment”stringisanimmutabledatatype,错误出现在下面的代码中:spam='Ihaveapetcat.'spam[13]='r'print(spam)正确的做法是:spam='Ihaveapetcat.'spamspam=spam[:13]+'r'+spam[14:]print(spam)6.尝试将非字符串值与字符串连接导致“TypeError:Can'tconvert'int'objecttostrimplicitly"错误发生在以下代码中:numEggs=12print('Ihave'+numEggs+'eggs.')正确的方法是:numEggs=12print('Ihave'+str(numEggs)+'eggs.')numEggs=12print('Ihave%seggs.'%(numEggs))7.忘记在字符串的开头和结尾加引号导致“SyntaxError:EOLwhilescanningstringliteral”这个错误出现在下面的代码中:print(Hello!')print('Hello!)myName='Al'print('Mynameis'+myName+.Howareyou?')8.打字错误变量或函数名称导致“NameError:name'fooba'isnotdefined”此错误出现在以下代码中:foobar='Al'print('Mynameis'+fooba)spam=ruond(4.2)spam=Round(4.2)9.方法名称的拼写错误导致“AttributeError:‘str’对象没有属性‘lowerr’”。此错误出现在以下代码中:spam='THISISINLOWERCASE.'spamspam=spam.lowerr()10.引用超出列表的最大索引,导致“IndexError:listindexoutofrange”。出现这个错误的代码如下:spam=['cat','dog','mouse']print(spam[6])11.使用不存在的字典键导致“KeyError:'spam'”这个错误出现在以下代码中:spam={'cat':'Zophie','dog':'Basil','mouse':'Whiskers'}print('Thenameofmypetzebrais'+spam['zebra'])12.尝试useaPythonkeywordasavariablenameresultsin"SyntaxError:invalidsyntax"Pythonkeycannotbeusedasavariablename,这个错误出现在以下代码中:class='algebra'Python3的关键字是:and,as,assert,break,class,continue,def,del,elif,else,except,False,finally,for,from,global,if,import,in,is,lambda,None,nonlocal,not,or,pass,raise,返回、真、尝试、同时、使用、yield13。在新变量的定义中使用自增运算符导致“NameError:name'foobar'isnotdefined”声明变量时不要使用0或空字符串作为初始值,所以句子spam+=1使用auto-自增运算符等于spam=spam+1,也就是说spam需要指定一个有效的初始值错误出现在以下代码中:spam=0spam+=42eggs+=4214。在定义局部变量之前在函数中使用局部变量(此时有一个与局部变量同名的全局变量)导致“UnboundLocalError:localvariable'foobar'referenced"beforeassignment"使用局部变量时非常复杂在一个函数中同时存在一个同名的全局变量。使用规则是:如果函数中定义了任何东西,如果只在函数中使用则为局部变量,否则为全局变量变量。这意味着您不能在定义它之前将其用作函数中的全局变量。错误发生在以下代码中:someVar=42defmyFunction():print(someVar)someVar=100myFunction()15.尝试使用range()创建整数列表会导致“TypeError:'range'objectdoesnotsupportitemassignment”需要记住range()返回一个"range对象”,而不是实际的值列表。错误出现在下面的代码中:spam=range(10)spam[4]=-1正确的写法:spam=list(range(10))spam[4]=-1(注:spam=rangeinPython2(10)是可行的,因为range()在Python2中返回的是一个列表值,但是在Python3中会出现上面的错误16.没有++或--自增自减运算符。导致“SyntaxError:invalidsyntax”如果你习惯了C++、Java、PHP等其他语言,也许你会想尝试使用++或--来递增和递减一个变量。Python中没有这样的运算符。错误出现在下面的代码中:spam=1spam++正确的写法:spam=1spam+=117,方法的第一个参数忘记加上self参数导致“TypeError:myMethod()takesnoarguments(1given)”错误发生在下面的代码中:classFoo():defmyMethod():print('Hello!')a=Foo()a.myMethod()