python新手经常遇到的17个错误分析


Posted in Python onJuly 30, 2014

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)错误的使用缩进量。(导致“IndentationError:unexpected indent”、“IndentationError:unindent does not match any outer indetation level”以及“IndentationError:expected an indented block”)

记住缩进增加只用在以:结束的语句之后,而之后必须恢复到之前的缩进格式。该错误发生在如下代码中:

print('Hello!')
  print('Howdy!')
 
或者:
 
if spam== 42:
  print('Hello!')
 print('Howdy!')
 
或者:
 
if spam== 42:
print('Hello!')

4)在 for 循环语句中忘记调用 len() (导致“TypeError: 'list' object cannot be interpreted as an integer”)

通常你想要通过索引来迭代一个list或者string的元素,这需要调用 range() 函数。要记得返回len 值而不是返回这个列表。

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

spam= ['cat','dog','mouse']
for iin range(spam):
  print(spam[i])

5)尝试修改string的值(导致“TypeError: 'str' object does not support item assignment”)
string是一种不可变的数据类型,该错误发生在如下代码中:

spam= 'I have a pet cat.'
spam[13]= 'r'
print(spam)

而你实际想要这样做:

spam= 'I have a pet cat.'
spam= spam[:13]+ 'r' + spam[14:]
print(spam)

6)尝试连接非字符串值与字符串(导致 “TypeError: Can't convert 'int' object to str implicitly”)

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

numEggs= 12
print('I have ' + numEggs+ ' eggs.')

而你实际想要这样做:

numEggs= 12
print('I have ' + str(numEggs)+ ' eggs.')
 
或者:
 
numEggs= 12
print('I have %s eggs.' % (numEggs))

7)在字符串首尾忘记加引号(导致“SyntaxError: EOL while scanning string literal”)
该错误发生在如下代码中:

print(Hello!')
 
或者:
 
print('Hello!)
 
或者:
 
myName= 'Al'
print('My name is ' + myName+ . How are you?')

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

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

foobar= 'Al'
print('My name is ' + fooba)
 
或者:
 
spam= ruond(4.2)
 
或者:
 
spam= Round(4.2)

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

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

spam= 'THIS IS IN LOWERCASE.'
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 of my pet zebra is ' + spam['zebra'])

12)尝试使用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

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

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

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

spam= 0
spam+= 42
eggs+= 42

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

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

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

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

someVar= 42
def myFunction():
  print(someVar)
  someVar= 100
myFunction()

15)尝试使用 range()创建整数列表(导致“TypeError: 'range' object does not support item assignment”)

有时你想要得到一个有序的整数列表,所以 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 中就会产生以上错误)

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

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

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

spam= 1
spam++

也许这才是你想做的:

spam= 1
spam+= 1

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

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

class Foo():
  def myMethod():
    print('Hello!')
a= Foo()
a.myMethod()
Python 相关文章推荐
详解Python中find()方法的使用
May 18 Python
Python实现的彩票机选器实例
Jun 17 Python
Python读取网页内容的方法
Jul 30 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
Dec 25 Python
Tornado 多进程实现分析详解
Jan 12 Python
python解析json串与正则匹配对比方法
Dec 20 Python
python制作图片缩略图
Apr 30 Python
ubuntu 16.04下python版本切换的方法
Jun 14 Python
Python timer定时器两种常用方法解析
Jan 20 Python
没编程基础可以学python吗
Jun 17 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
python 常用日期处理-- datetime 模块的使用
Sep 02 Python
Python使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 #Python
Python代码的打包与发布详解
Jul 30 #Python
Python中lambda的用法及其与def的区别解析
Jul 28 #Python
python代码制作configure文件示例
Jul 28 #Python
python编写网页爬虫脚本并实现APScheduler调度
Jul 28 #Python
python调用新浪微博API项目实践
Jul 28 #Python
python中的sort方法使用详解
Jul 25 #Python
You might like
linux命令之调试工具strace的深入分析
2013/06/03 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
PHP连接MySQL数据库并以json格式输出
2018/05/21 PHP
PHP abstract与interface之间的区别
2013/11/11 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
解决WordPress使用CDN后博文无法评论的错误
2015/12/15 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
JavaScript中的遍历详解(多种遍历)
2017/04/07 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
优雅的在React项目中使用Redux的方法
2018/11/10 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
微信公众号网页分享功能开发的示例代码
2020/05/27 Javascript
js实现3D旋转效果
2020/08/18 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
用Python和MD5实现网站挂马检测程序
2014/03/13 Python
Python合并多个装饰器小技巧
2015/04/28 Python
Django返回json数据用法示例
2016/09/18 Python
pandas求两个表格不相交的集合方法
2018/12/08 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法
2012/05/24 面试题
linux面试题参考答案(6)
2014/08/29 面试题
大学总结自我鉴定
2014/01/18 职场文书
担保书怎么写
2014/04/01 职场文书
小学一年级评语大全
2014/04/22 职场文书
工商管理专业毕业生求职信
2014/05/26 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
2014全年工作总结
2014/11/27 职场文书
2015幼儿园新学期寄语
2015/02/27 职场文书
2015年科室工作总结
2015/04/10 职场文书
升学宴家长致辞
2015/07/27 职场文书
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB
mysql查询结果实现多列拼接查询
2022/04/03 MySQL