对于Python新手来说,在学习过程中运行代码时或多或少都会遇到一些错误。乍一看似乎很难。随着代码量的积累,熟能生巧。当遇到一些运行时错误时,可以快速定位到原来的问题。以下是一些常见的17个错误。当你写的代码没有这些错误时,你的Python技能就会更上一层楼。换句话说,当你成为一名合格的Python开发人员时,你可能会“连写都不会”这样的错误。1、忘记在if、for、def、elif、else、class等声明的末尾添加,会导致“SyntaxError:invalidsyntax”,如下:ifspam==42print('Hello!')2.改用=of==也会导致“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.Atypoinavariableorfunctionnamecauses"NameError:name'fooba'isnotdefined"此错误出现在以下代码中:foobar='Al'print('Mynameis'+fooba)spam=ruond(4.2)spam=Round(4.2)9.方法名拼写错误导致“AttributeError:'str'objecthasnoattribute'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.TryingtouseaPythonkeywordasavariablenameresultedin"SyntaxError:invalidsyntax"Pythonkeyscannotbeusedasvariablenames,theerroroccursinthefollowingcode: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,return,True,try,while,while,yield13。在新变量的定义中使用自增运算符会导致“NameError:name'foobar'isnotdefined”声明变量时不要使用0或空字符串作为初始值,因此句子spam+=1使用自增运算符等于spam=spam+1,也就是说spam需要指定一个有效的初值value错误出现在以下代码中:spam=0spam+=42eggs+=4214。在定义局部变量之前在函数中使用局部变量(此时存在与局部变量同名的全局变量)导致“UnboundLocalError:localvariable'foobar'referenced'beforeassignment'使用时非常复杂一个函数中的局部变量,同时存在一个同名的全局变量。使用规则是:如果函数中定义了任何东西,如果只在函数中使用则为局部变量,否则为局部变量是一个全局变量。这意味着您不能在定义它之前将其用作函数中的全局变量。错误发生在这样的代码中:someVar=42defmyFunction():print(someVar)someVar=100myFunction()15.尝试使用range()创建整数列表会导致“TypeError:'range'objectdoesnotsupportitemassignment”有时您希望获得有序的整数列表,因此range()似乎是生成此列??表的好方法。但是,您需要记住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()
