新手学习Python时常见的错误

在运行或编写一个程序时常会遇到错误异常,这时Python会给你一个错误提示类名,告诉出现了什么样的问题(python是面向对象语言,所以程序抛出的异常也是类)。能很好的理解这些错误提示类名所代表的意思,可以帮助你在最快的时间内找到问题所在,从而解决程序上的问题是非常有帮助的。

搜集了一些python最重要的内建异常类名,并做了简单的介绍:

AttributeError:属性错误,特性引用和赋值失败时会引发属性错误

NameError:试图访问的变量名不存在

SyntaxError:语法错误,代码形式错误

Exception:所有异常的基类,因为所有python异常类都是基类Exception的其中一员,异常都是从基类Exception继承的,并且都在exceptions模块中定义。

IOError:一般常见于打开不存在文件时会引发IOError错误,也可以解理为输出输入错误

KeyError:使用了映射中不存在的关键字(键)时引发的关键字错误

IndexError:索引错误,使用的索引不存在,常索引超出序列范围,什么是索引

TypeError:类型错误,内建操作或是函数应于在了错误类型的对象时会引发类型错误

ZeroDivisonError:除数为0,在用除法操作时,第二个参数为0时引发了该错误

ValueError:值错误,传给对象的参数类型不正确,像是给int()函数传入了字符串数据类型的参数。

下面具体介绍:

一:语法错误(此时会显示  SyntaxError :invalid syntax)

情形1:忘记在 if , elif , else , for , while , class ,def 声明末尾添加 :该错误会报错为( “SyntaxError :invalid syntax”) 该错误将发生在类似如下代码中:

if spam == 42 print(‘Hello!‘) 

情形2:错误使用“=”和“==”。前者为赋值,后者为判断是否等于。该错误会报错为(“SyntaxError: invalid syntax”) ,会发生在如下代码:

if spam = 42: print(‘Hello!‘) 

情形3.在字符串首尾忘记加引号(导致“SyntaxError: EOL while scanning string literal”)

该错误发生在如下代码中:

print(Hello!‘)

或者:

print(‘Hello!)

或者:

myName = ‘Al‘

print(‘My name is ‘+ myName + . How are you?‘)

4)尝试使用Python关键字作为变量名(导致“SyntaxError:invalid syntax”)

Python关键不能用作变量名,该错误发生在如下代码中:

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, yield

5)错在 ++ 或者 -- 自增自减操作符。(导致“SyntaxError: invalid syntax”)

如果你习惯于例如 C++ , Java, PHP 等其他的语言,也许你会想要尝试使用 ++ 或者 -- 自增自减一个变量。在Python中是没有这样的操作符的

该错误发生在如下代码中:

spam = 1

spam++

也许这才是你想做的:

spam = 1

spam += 1

二:错误的使用缩进量(此时会显示IndentationError:??????????)

情形1:

print(‘Hello!‘)
   print(‘Howdy!‘) 

会显示:IndentationError: unexpected indent。

情形2:

if spam == 42:
print(‘Hello!‘)
print(‘Howdy!‘) 

会显示:IndentationError: expected an indented block

Python语言是一款对缩进非常敏感的语言,给很多初学者带来了困惑,即便是很有经验的python程序员,也可能陷入陷阱当中。最常见的情况是tab和空格的混用会导致错误,或者缩进不对,而这是用肉眼无法分别的。

在编译时会出现这样的错IndentationError:expected an indented block说明此处需要缩进,你只要在出现错误的那一行,按空格或Tab(但不能混用)键缩进就行。

往往有的人会疑问:我根本就没缩进怎么还是错,不对,该缩进的地方就要缩进,不缩进反而会出错,,比如:

if xxxxxx:

(空格)xxxxx

或者

def xxxxxx:

(空格)xxxxx

还有

for xxxxxx:

(空格)xxxxx

一句话 有冒号的下一行往往要缩进,该缩进就缩进

四:格式错误(TypeError:……)

1.在 for 循环语句中忘记调用 len() (导致“TypeError: range() integer end argument expected, got list.”) 通常你想要通过索引来迭代一个list或者string的元素,这需要调用 range() 函数。要记得返回len 值而不是返回这个列表。 该错误发生在如下代码中:

spam = [‘cat‘, ‘dog‘, ‘mouse‘]
for i in range(spam):
     print(spam[i]) 

正确的代码是:

spam = [‘cat‘,‘dog‘, ‘mouse‘]

for i in range(len(spam)):

    print(spam[i])

2.尝试修改string的值(导致“TypeError: ‘str‘ object does not support itemassignment”)

string是一种不可变的数据类型,该错误发生在如下代码中:

spam = ‘I have apet cat.‘

spam[13] = ‘r‘

print(spam)

你可以这样修改

spam = ‘I have apet cat.‘

spam = spam[:13] +‘r‘ + spam[14:]

print(spam)

3.尝试连接非字符串值与字符串(导致 “TypeError: Can‘t convert ‘int‘ object to strimplicitly”)

该错误发生在如下代码中:

numEggs = 12

print(‘I have ‘ +numEggs + ‘ eggs.‘)

而你实际想要这样做:

numEggs = 12

print(‘I have ‘ +str(numEggs) + ‘ eggs.‘)

或者:

numEggs = 12

print(‘I have %seggs.‘ % (numEggs))

4)尝试使用 range()创建整数列表(导致“TypeError: ‘range‘ object does not support itemassignment”)

有时你想要得到一个有序的整数列表,所以 range() 看上去是生成此列表的不错方式。然而,你需要记住 range() 返回的是 “range object”,而不是实际的 list 值。

该错误发生在如下代码中:

spam = range(10)

spam[4] = -1

也许这才是你想做:

spam =list(range(10))

spam[4] = -1

(注意:在 Python 2 中 spam = range(10) 是能行的,因为在 Python 2 中 range() 返回的是list值,但是在 Python 3 中就会产生以上错误)

5)忘记为方法的第一个参数添加self参数(导致“TypeError: myMethod() takes no arguments (1 given)”)

该错误发生在如下代码中:

class Foo():

def myMethod():

print(‘Hello!‘)

a = Foo()

a.myMethod()

五.

变量或者函数名拼写错误(导致“NameError: name ‘fooba‘ is not defined”)

该错误发生在如下代码中:

foobar = ‘Al‘

print(‘My name is ‘+ fooba)

或者:

spam = ruond(4.2)

或者:

spam = Round(4.2)

13)在一个定义新变量中使用增值操作符(导致“NameError: name ‘foobar‘ is not defined”)

不要在声明变量时使用0或者空字符串作为初始值,这样使用自增操作符的一句spam += 1等于spam = spam + 1,这意味着spam需要指定一个有效的初始值。

该错误发生在如下代码中:

spam = 0

spam += 42

eggs += 42

9)方法名拼写错误(导致 “AttributeError: ‘str‘ object has no attribute‘lowerr‘”)

该错误发生在如下代码中:

spam = ‘THIS IS INLOWERCASE.‘

spam =spam.lowerr()

10)引用超过list最大索引(导致“IndexError: list index out of range”)

该错误发生在如下代码中:

spam = [‘cat‘,‘dog‘, ‘mouse‘]

print(spam[6])

11)使用不存在的字典键值(导致“KeyError:‘spam’”)

该错误发生在如下代码中:

spam = {‘cat‘:‘Zophie‘, ‘dog‘: ‘Basil‘, ‘mouse‘: ‘Whiskers‘}

print(‘The name ofmy pet zebra is ‘ + spam[‘zebra‘])

14)在定义局部变量前在函数中使用局部变量(此时有与局部变量同名的全局变量存在)(导致“UnboundLocalError: local variable ‘foobar‘ referencedbefore assignment”)

在函数中使用局部变来那个而同时又存在同名全局变量时是很复杂的,使用规则是:如果在函数中定义了任何东西,如果它只是在函数中使用那它就是局部的,反之就是全局变量。

这意味着你不能在定义它之前把它当全局变量在函数中使用。

该错误发生在如下代码中:

someVar = 42

def myFunction():

print(someVar)

someVar = 100

myFunction()

参考:http://blog.csdn.net/u010541307/article/details/52825981

时间: 2024-10-09 19:44:52

新手学习Python时常见的错误的相关文章

写代码时常见的错误

实验室有要做阶段练习题了,其中有一道改bug题: #include <iostream> #include <vector> int main(int, char**) { std::vector<int>** ppRandomData = distributeRandomInt(100); for (unsigned int i=0; i<1000; i++) { if (ppRandomData[i]) { std::cout << "E

Eclipse部署Web项目时常见的错误和解决方案

Tomcat部署Web项目到tomcat 在eclipse中找到Servers项,打开服务器(F3)(建议直接删除服务器,重新建立再设置比较好)1.Servers Locations 中选择Use Tomcat installation 2.Deploy path 改成 webapps这时候在eclipse上直接运行项目,就会自动部署到tomcat上,通过浏览器或者eclipse都可以访问该项目. Tomcat控制台的用户角色配置 在Tomcat的Mapper App中,默认没有提供控制台角色.

SSM做增删改查时常见的错误

项目一错误总结 常见的服务器启动404报错,可能出现的原因: 1)启动项目的路径写的不对. 2)由于我在GitHub中拉下来的文件,导入eclipse中时,parent项目导入的信息与其他的项目导入到内容不符合,导致每次改动后不会生效.也不会扫描到web层 经过重新导入以后就可以了. 3)使用postman发送GET或者POST请求时,出现404的报错是由于不是通过json数据请求的. 做修改方法时,每次按照id,name修改后,会更新全部的数据? 说明id值没有生效,查看mapper.xml时

新手学习python(五)函数

1)定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 2)使用函数的好处:1.简化代码:2.提高代码的复用性:3.代码可扩展 3)举个例子: def sayhello():    #使用关键字def定义函数,后面是函数名 print('hello world')   #函数体 sayhello()   #调用函数 4)参数传递 def calc(a,b):   #a,b为形参,形式参数 res=a*b print('%s * %s=%s'%

vscode写python时的代码错误提醒和自动格式化

python的代码错误检查通常用pep8.pylint和flake8,自动格式化代码通常用autopep8.yapf.black.这些工具均可以利用pip进行安装,这里介绍传统的利用pip.exe安装和在VScode中安装两种方式.[温馨提醒:我用的是pylint]要使用flake8或要想flake8等工具起作用,前提是必须把settings.json文件中的"python.linting.enabled"值设为“true”,否则即使安装了这些工具,也起不到代码的错误提醒. [传统安装

新手学习python(七)第三方模块

第三方模块,是指别人写好的一些模块,要安装之后才可以使用的. 1)傻瓜式安装 A. 安装好python的前提下,打开cmd. 例如安装pymysql ,在cmd输入命令 pip install pymysql B. 没有pip命令: 1.pycharm里面点python console    2.找到python安装目录    3.然后把安装目录下的scripts目录,加入到环境变量里面即可     ps:环境变量在PATH里面加 C. Unknown or unsupported comman

新手学习python(三)字典相关操作方法

1)字典相关操作方法 infos ={'name':'张三','sex':'男','addr':'广州市','age':'20'} #查找 infos.get('name')   #获取name对应的值 infos.['sex']     #获取sex对应的值, infos.get('phone')  #取不到这个key的话,就是None infos.get('phone',110)   #如果取不到这个值,默认就是110 infos['blood_type']   #如果key不存在,则会报错

新手学习python(八)加密模块(MD5加密)

由于MD5模块在python3中被移除 在python3中使用hashlib模块进行md5操作 import hashlib m=hashlib.md5() #创建MD5对象passwd='aaa123' #待加密密码m.update(passwd.encode()) #不能直接对字符串加密,要先把字符串转成bytes类型print(m.hexdigest()) #打印加密结果#md5加密是不可逆的 ==== 加密函数 ====def my_md5(str): import hashlib ne

新手学习python(十)操作数据库redis

数据库分为两类:1.关系型数据库: MySQL,Oracle,sql server,db2,sqlite 需要sql语句 数据存在磁盘上2.非关系型数据库:mongodb, redis 没有表结构 没有sql语句 使用get('k'),set('xx') 说明:1.redis数据全部存在内存里面 2.redis本身性能是非常好的,每秒支持30w次的读写 import redisr=redis.Redis(host='xx.xx.xx.xx',password='aaaaa',db=0,port=