对于初学者来说,Pythoner在学习过程中运行代码时或多或少会遇到一些错误,一开始可能会显得吃力。随着代码量的积累,熟能生巧。当遇到一些运行时错误时,可以快速定位到原来的问题。下面罗列了17个常见的错误,希望对大家有所帮助。1、忘记在if、for、def、elif、else、class等声明的末尾添加会导致“SyntaxError:invalidsyntax”如下:ifspam==42print('Hello!')2.使用=而不是==还会导致“SyntaxError:语法无效”=是一个赋值运算符,而==是一个相等比较。错误出现在以下代码中:ifspam=42:print('Hello!')3.缩进使用不当导致“IndentationError:unexpectedindent”、“IndentationError:unindentdoesnotmatchanyouterindetationlevel”和“IndentationError:expectedanindentedblock”请记住,缩进增加仅在以:结尾的语句之后使用,并且之后必须恢复到以前的缩进格式。错误出现在以下代码中:print('Hello!')print('Howdy!')或者:ifspam==42:print('Hello!')print('Howdy!')4.在for循环中statementForgettingtocalllen()causes"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)and正确的方法是:spam='Ihaveapetcat.'spam=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('我的名字是'+myName+.Howareyou?')8.一个变量或函数名拼写错误导致“NameError:name'fooba'isnotdefined”这个错误出现在下面的代码中:foobar='Al'print('Mynameis'+fooba)spam=ruond(4.2)spam=Round(4.2)9.方法名拼写错误"AttributeError:'str'objecthasnoattribute'lowerr'"这个错误出现在下面的代码中:spam='THIS小写。'spam=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.尝试使用Python关键字作为变量名导致“SyntaxError:invalidsyntax”PythonkeycannotUsedasavariablename,错误出现在以下代码中: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,with,yield13.在新变量的定义中使用自增运算符导致“NameError:name'foobar'isnotdefined”声明变量时不要使用0或空字符串作为初始值,所以一句spam+=1使用了自增运算符等于spam=spam+1,表示spam需要指定一个有效的初始值错误出现在以下代码中:spam=0spam+=42eggs+=4214,在定义局部变量之前在函数中使用局部变量(此时有一个全局变量与局部变量同名)导致“UnboundLocalError:localvariable'foobar'referencedbeforeassignment'在函数中使用局部变量并且同时存在同名的全局变量时,使用规则是:如果函数中定义了任何东西,如果它只在函数中使用,它是局部的,否则就是全局变量。这意味着你不能在定义它之前将它作为函数中的全局变量。错误出现在以下代码中: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()
