Python常见错误分析
对于刚入门的Pythoner在学习过程中运行代码是或多或少会遇到一些错误,刚开始可能看起来比较费劲。随着代码量的积累,熟能生巧当遇到一些运行时错误时能够很快的定位问题原题。下面整理了常见的错误,希望能够帮助到大家。
1、
忘记在if,for,def,elif,else,class等声明末尾加:
会导致SyntaxError:invalidsyntax如下:
ifspam42
print(Hello!)
2、
使用而不是
也会导致SyntaxError:invalidsyntax
是赋值操作符而是等于比较操作。该错误发生在如下代码中:
ifspam42:
print(Hello!)
3、
错误的使用缩进量
导致IndentationError:unexpectedindent、IndentationError:unindentdoesnotmatchanyouterindetationlevel以及IndentationError:expectedanindentedblock
记住缩进增加只用在以:结束的语句之后,而之后必须恢复到之前的缩进格式。该错误发生在如下代码中:
print(Hello!)
print(Howdy!)
或者:
ifspam42:
print(Hello!)
print(Howdy!)
4、
在for循环语句中忘记调用len()
导致TypeError:listobjectcannotbeinterpretedasaninteger
通常你想要通过索引来迭代一个list或者string的元素,这需要调用range()函数。要记得返回len值而不是返回这个列表。
该错误发生在如下代码中:
spam〔cat,dog,mouse〕
foriinrange(spam):
print(spam〔i〕)
5、
尝试修改string的值
导致TypeError:strobjectdoesnotsupportitemassignment
string是一种不可变的数据类型,该错误发生在如下代码中:
spamIhaveapetcat。
spam〔13〕r
print(spam)
正确的做法是:
spamIhaveapetcat。
spamspam〔:13〕rspam〔14:〕
print(spam)
6、
尝试连接非字符串值与字符串
导致TypeError:Cantconvertintobjecttostrimplicitly
该错误发生在如下代码中:
numEggs12
print(IhavenumEggseggs。)
正确的做法是:
numEggs12
print(Ihavestr(numEggs)eggs。)
numEggs12
print(Ihaveseggs。(numEggs))
7、
在字符串首尾忘记加引号
导致SyntaxError:EOLwhilescanningstringliteral
该错误发生在如下代码中:
print(Hello!)
print(Hello!)
myNameAl
print(MynameismyName。Howareyou?)
8、
变量或者函数名拼写错误
导致NameError:namefoobaisnotdefined
该错误发生在如下代码中:
foobarAl
print(Mynameisfooba)
spamruond(4。2)
spamRound(4。2)
9、
方法名拼写错误
导致AttributeError:strobjecthasnoattributelowerr
该错误发生在如下代码中:
spamTHISISINLOWERCASE。
spamspam。lowerr()
10、
引用超过list最大索引
导致IndexError:listindexoutofrange
该错误发生在如下代码中:
spam〔cat,dog,mouse〕
print(spam〔6〕)
11、
使用不存在的字典键值
导致KeyError:‘spam’
该错误发生在如下代码中:
spam{cat:Zophie,dog:Basil,mouse:Whiskers}
print(Thenameofmypetzebraisspam〔zebra〕)
12、
尝试使用Python关键字作为变量名
导致SyntaxError:invalidsyntax
Python关键不能用作变量名,该错误发生在如下代码中:
classalgebra
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,yield
13、
在一个定义新变量中使用增值操作符
导致NameError:namefoobarisnotdefined
不要在声明变量时使用0或者空字符串作为初始值,这样使用自增操作符的一句spam1等于spamspam1,这意味着spam需要指定一个有效的初始值。
该错误发生在如下代码中:
spam0
spam42
eggs42
14、
在定义局部变量前在函数中使用局部变量(此时有与局部变量同名的全局变量存在)
导致UnboundLocalError:localvariablefoobarreferencedbeforeassignment
在函数中使用局部变来那个而同时又存在同名全局变量时是很复杂的,使用规则是:如果在函数中定义了任何东西,如果它只是在函数中使用那它就是局部的,反之就是全局变量。
这意味着你不能在定义它之前把它当全局变量在函数中使用。
该错误发生在如下代码中:
someVar42
defmyFunction():
print(someVar)
someVar100
myFunction()
15、
尝试使用range()创建整数列表
导致TypeError:rangeobjectdoesnotsupportitemassignment
有时你想要得到一个有序的整数列表,所以range()看上去是生成此列表的不错方式。然而,你需要记住range()返回的是rangeobject,而不是实际的list值。
该错误发生在如下代码中:
spamrange(10)
spam〔4〕1
正确的做法是:
spamlist(range(10))
spam〔4〕1
16、
不存在或者自增自减操作符。
导致SyntaxError:invalidsyntax
如果你习惯于例如C,Java,PHP等其他的语言,也许你会想要尝试使用或者自增自减一个变量。在Python中是没有这样的操作符的。
该错误发生在如下代码中:
spam1
spam
正确的做法是:
spam1
spam1
17、
忘记为方法的第一个参数添加self参数
导致TypeError:myMethod()takesnoarguments(1given)
该错误发生在如下代码中:
classFoo():
defmyMethod():
print(Hello!)
aFoo()
a。myMethod()