在运行或编写一个程序时常会遇到错误异常,这时python会给你一个错误提示类名,告诉出现了什么样的问题(Python是面向对象语言,所以程序抛出的异常也是类)。能很好的理解这些错误提示类名所代表的意思,可以帮助你在最快的时间内找到问题所在,从而解决程序上的问题是非常有帮助的。搜集了一些python最重要的内建异常类名,并做了简单的介绍:
AttributeError:属性错误,特性引用和赋值失败时会引发属性错误
NameError:试图访问的变量名不存在
SyntaxError:语法错误,代码形式错误
Exception:所有异常的基类,因为所有python异常类都是基类Exception的其中一员,异常都是从基类Exception继承的,并且都在exceptions模块中定义。
IOError:一般常见于打开不存在文件时会引发IOError错误,也可以解理为输出输入错误
KeyError:使用了映射中不存在的关键字(键)时引发的关键字错误
IndexError:索引错误,使用的索引不存在,常索引超出序列范围,什么是索引
TypeError:类型错误,内建操作或是函数应于在了错误类型的对象时会引发类型错误
ZeroDivisonError:除数为0,在用除法操作时,第二个参数为0时引发了该错误
ValueError:值错误,传给对象的参数类型不正确,像是给int()函数传入了字符串数据类型的参数。
1,忘记在 if , elif, else , for , while , class ,def声明末尾添加:。该错误将发生在类似如下代码中:
ifspam==42
print('Hello!')
报错如下:
**SyntaxError:invalidsyntax**
2,使用 =而不是==。=是赋值操作符而== 是等于比较操作。该错误发生在如下代码中:
ifspam=42:
print('Hello!')
报错如下:
**SyntaxError:invalidsyntax**
3,错误的使用缩进量。
记住缩进增加只用在以:结束的语句之后,而之后必须恢复到之前的缩进格式。该错误发生在如下代码中:
ifspam==42:
print('Hello!')
print('Howdy!')
报错如下:
**IndentationError:unindentdoesnotmatchanyouterindentationlevel**
或者:
ifspam==42:
print('Hello!')
报错如下:
**IndentationError:unindentdoesnotmatchanyouterindentationlevel**
4,在 for循环语句中忘记调用 len()。
通常你想要通过索引来迭代一个list或者string的元素,这需要调用 range()函数。要记得返回len值而不是返回这个列表。
该错误发生在如下代码中:
spam= ['cat','dog','mouse']
foriinrange(spam):
print(spam[i])
报错如下:
**SyntaxError:invalidsyntax**
5,尝试修改string的值。
string是一种不可变的数据类型,该错误发生在如下代码中:
spam='I have apet cat.'
spam[13] ='r'
print(spam)
报错如下:
**TypeError:'str'objectdoesnotsupportitemassignment**
而你实际想要这样做:
spam='I have apet cat.'
spam=spam[:13]+'r'+spam[14:]
print(spam)
6,尝试连接非字符串值与字符串。
该错误发生在如下代码中:
numEggs=12
print('I have '+numEggs+' eggs.')
报错如下:
**TypeError:canonlyconcatenatestr(not"int")tostr**
而你实际想要这样做:
numEggs=12
print('I have '+str(numEggs)+' eggs.')
或者:
numEggs=12
print('I have %seggs.'%(numEggs))
7,在字符串首尾忘记加引号。
该错误发生在如下代码中:
print(HelloPython!')
报错如下:
**SyntaxError:invalidsyntax**
或者:
print('Hello Python!)
报错如下:
**SyntaxError:invalidsyntax**
或者:
myName='Python'
print('My name is '+myName+.Howareyou?')
报错如下:
**SyntaxError:invalidsyntax**
8,变量或者函数名拼写错误。
该错误发生在如下代码中:
foobar='Python'
print('My name is '+fooba)
报错如下:
**NameError:name'fooba'isnotdefined**
或者:
spam=ruond(4.2)
报错如下:
**NameError:name'ruond'isnotdefined**
或者:
spam=Round(4.2)
报错如下:
**NameError:name'Ruond'isnotdefined**
9,方法名拼写错误。
该错误发生在如下代码中:
spam='THIS IS INLOWERCASE.'
spam=spam.lowerr()
报错如下:
**AttributeError:'str'objecthasnoattribute'lowerr'**
10,引用超过list最大索引。
该错误发生在如下代码中:
spam= ['cat','dog','mouse']
print(spam[6])
报错如下:
**IndexError:listindexoutofrange**
11,使用不存在的字典键值。
该错误发生在如下代码中:
spam= {'cat':'Zophie','dog':'Basil','mouse':'Whiskers'}
print('The name ofmy pet zebra is '+spam['zebra'])
报错如下:
**KeyError:'zebra'**
12,尝试使用Python关键字作为变量名。
Python关键不能用作变量名,该错误发生在如下代码中:
class='algebra'
报错如下:
**SyntaxError:invalidsyntax**
Python的关键字有:
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,在一个定义新变量中使用增值操作符。
不要在声明变量时使用0或者空字符串作为初始值,这样使用自增操作符的一句spam += 1等于spam = spam + 1,这意味着spam需要指定一个有效的初始值。
该错误发生在如下代码中:
spam=0
spam+=42
eggs+=42
报错如下:
**NameError:name'eggs'isnotdefined**
14,在定义局部变量前在函数中使用局部变量(此时有与局部变量同名的全局变量存在)。
该错误发生在如下代码中:
someVar=42
defmyFunction():
print(someVar)
someVar=100
myFunction()
报错如下:
**UnboundLocalError:localvariable'someVar'referencedbeforeassignment**
**在函数中使用局部变来那个而同时又存在同名全局变量时是很复杂的,使用规则是:如果在函数中定义了任何东西,如果它只是在函数中使用那它就是局部的,反之就是全局变量。
这意味着你不能在定义它之前把它当全局变量在函数中使用。**
15,尝试使用range()创建整数列表。
有时你想要得到一个有序的整数列表,所以 range() 看上去是生成此列表的不错方式。然而,你需要记住 range() 返回的是 “range object”,而不是实际的 list 值。
该错误发生在如下代码中:
spam=range(10)
spam[4] =-1
报错如下:
**TypeError:'range'objectdoesnotsupportitemassignment**
也许这才是你想做:
spam=list(range(10))
spam[4] =-1
**注意:在Python2中spam=range(10)是能行的,
因为在Python2中range()返回的是list值,
但是在Python3中就会产生以上错误**
16,不错在++或者 --自增自减操作符。
如果你习惯于例如 C++ , Java, PHP等其他的语言,也许你会想要尝试使用 ++ 或者 -- 自增自减一个变量。在Python中是没有这样的操作符的。
该错误发生在如下代码中:
spam=1
spam++
报错如下:
**SyntaxError:invalidsyntax**
也许这才是你想做的:
spam=1
spam+=1
17,忘记为方法的第一个参数添加self参数。
该错误发生在如下代码中:
classFoo():
defmyMethod():
print('Hello!')
a=Foo()
a.myMethod()
报错如下:
**TypeError:myMethod()takes0positionalargumentsbut1wasgiven**
以上就是小编给大家整理的一些新手常见的报错提示。
小编作为一个python老程序员也整理了一套自己的学习方案,从最基础的python脚本到web开发,爬虫,数据分析,数据可视化,机器学习,等,这些资料有想要的小伙伴 点击 立马加入学习