前言

Python 以其简单易懂的语法格式与其它语言形成鲜明对比,初学者遇到最多的问题就是不按照 Python 的规则来写,即便是有编程经验的程序员,也容易按照固有的思维和语法格式来写 Python 代码,之前小编给大家分享过了一篇《Python新手们容易犯的几个错误总结》,但总结的不够全面,最近看到有一个外国小伙总结了一些大家常犯的错误,16 Common Python Runtime Errors Beginners Find,索性我把他翻译过来并在原来的基础补充了我的一些理解,希望可以让你避开这些坑。
0、忘记写冒号
在 if、elif、else、for、while、class、def 语句后面忘记添加 “:”
if spam == 42
print('Hello!')
导致:SyntaxError: invalid syntax
1、误用 “=” 做等值比较
“=” 是赋值操作,而判断两个值是否相等是 “==”
if spam = 42:
print('Hello!')
导致:SyntaxError: invalid syntax
2、使用错误的缩进
Python用缩进区分代码块,常见的错误用法:
print('Hello!')
print('Howdy!')
导致:IndentationError: unexpected indent。同一个代码块中的每行代码都必须保持一致的缩进量
if spam == 42:
print('Hello!')
print('Howdy!')
导致:IndentationError: unindent does not match any outer indentation level。代码块结束之后缩进恢复到原来的位置
if spam == 42:
print('Hello!')
导致:IndentationError: expected an indented block,“:” 后面要使用缩进
3、变量没有定义
if spam == 42:
print('Hello!')
导致:NameError: name 'spam' is not defined
4、获取列表元素索引位置忘记调用 len 方法
通过索引位置获取元素的时候,忘记使用 len 函数获取列表的长度。
spam = ['cat', 'dog', 'mouse'] for i in range(spam): print(spam[i])
导致:TypeError: range() integer end argument expected, got list. 正确的做法是:
spam = ['cat', 'dog', 'mouse'] for i in range(len(spam)): print(spam[i])
当然,更 Pythonic 的写法是用 enumerate
spam = ['cat', 'dog', 'mouse'] for i, item in enumerate(spam): print(i, item)
5、修改字符串
字符串一个序列对象,支持用索引获取元素,但它和列表对象不同,字符串是不可变对象,不支持修改。
spam = 'I have a pet cat.' spam[13] = 'r' print(spam)
导致:TypeError: 'str' object does not support item assignment 正确地做法应该是:
spam = 'I have a pet cat.' spam = spam[:13] + 'r' + spam[14:] print(spam)
6、字符串与非字符串连接
num_eggs = 12
print('I have ' + num_eggs + ' eggs.')
导致:TypeError: cannot concatenate 'str' and 'int' objects
字符串与非字符串连接时,必须把非字符串对象强制转换为字符串类型
num_eggs = 12
print('I have ' + str(num_eggs) + ' eggs.')
或者使用字符串的格式化形式
num_eggs = 12
print('I have %s eggs.' % (num_eggs))
7、使用错误的索引位置
spam = ['cat', 'dog', 'mouse'] print(spam[3])
导致:IndexError: list index out of range
列表对象的索引是从0开始的,第3个元素应该是使用 spam[2] 访问
8、字典中使用不存在的键
spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'}
print('The name of my pet zebra is ' + spam['zebra'])
在字典对象中访问 key 可以使用 [],但是如果该 key 不存在,就会导致:KeyError: 'zebra'
正确的方式应该使用 get 方法
spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'}
print('The name of my pet zebra is ' + spam.get('zebra'))
key 不存在时,get 默认返回 None
9、用关键字做变量名
class = 'algebra'
导致:SyntaxError: invalid syntax
在 Python 中不允许使用关键字作为变量名。Python3 一共有33个关键字。
>>> import keyword >>> print(keyword.kwlist) ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
10、函数中局部变量赋值前被使用
someVar = 42 def myFunction(): print(someVar) someVar = 100 myFunction()
导致:UnboundLocalError: local variable 'someVar' referenced before assignment
当函数中有一个与全局作用域中同名的变量时,它会按照 LEGB 的顺序查找该变量,如果在函数内部的局部作用域中也定义了一个同名的变量,那么就不再到外部作用域查找了。因此,在 myFunction 函数中 someVar 被定义了,所以 print(someVar) 就不再外面查找了,但是 print 的时候该变量还没赋值,所以出现了 UnboundLocalError
11、使用自增 “++” 自减 “--”
spam = 0 spam++
哈哈,Python 中没有自增自减操作符,如果你是从C、Java转过来的话,你可要注意了。你可以使用 “+=” 来替代 “++”
spam = 0 spam += 1
12、错误地调用类中的方法
class Foo:
def method1():
print('m1')
def method2(self):
print("m2")
a = Foo()
a.method1()
导致:TypeError: method1() takes 0 positional arguments but 1 was given
method1 是 Foo 类的一个成员方法,该方法不接受任何参数,调用 a.method1() 相当于调用 Foo.method1(a),但 method1 不接受任何参数,所以报错了。正确的调用方式应该是 Foo.method1()。
需要注意的是:以上代码都是基于 Python3 的,在 Python2 中即使是同样的代码出现的错误也不尽一样,尤其是最后一个例子。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# python新手入门
# python新手教程
# 新手学python
# python基础之入门必看操作
# Python学习入门之区块链详解
# 一张图带我们入门Python基础教程
# Python简明入门教程
# 给Python入门者的一些编程建议
# 简洁的十分钟Python入门教程
# 你眼中的Python大牛 应该都有这份书单
# Python书单 不将就
# 不可错过的十本Python好书
# Python如何快速上手? 快速掌握一门新语言的方法
# 不存在
# 应该是
# 是从
# 找了
# 不接受
# 与非
# 来写
# 的是
# 都是
# 变量名
# 几个
# 就会
# 如果你
# 让你
# 还没
# 过了
# 你可以
# 是有
# 尤其是
# 最多
相关文章:
如何用狗爹虚拟主机快速搭建网站?
建站VPS推荐:2025年高性能服务器配置指南
如何快速搭建支持数据库操作的智能建站平台?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
电商网站制作公司有哪些,1688网是什么意思?
宝塔建站助手安装配置与建站模板使用全流程解析
如何快速生成ASP一键建站模板并优化安全性?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
制作网站外包平台,自动化接单网站有哪些?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
微课制作网站有哪些,微课网怎么进?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
如何在香港服务器上快速搭建免备案网站?
制作销售网站教学视频,销售网站有哪些?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
青岛网站建设如何选择本地服务器?
建站之星如何优化SEO以实现高效排名?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
网站制作需要会哪些技术,建立一个网站要花费多少?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
定制建站是什么?如何实现个性化需求?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
盐城做公司网站,江苏电子版退休证办理流程?
如何快速生成凡客建站的专业级图册?
盘锦网站制作公司,盘锦大洼有多少5G网站?
建站之星如何助力企业快速打造五合一网站?
大型企业网站制作流程,做网站需要注册公司吗?
高防服务器租用首荐平台,企业级优惠套餐快速部署
公司网站的制作公司,企业网站制作基本流程有哪些?
,网页ppt怎么弄成自己的ppt?
网站制作价目表怎么做,珍爱网婚介费用多少?
,网站推广常用方法?
如何在Windows 2008云服务器安全搭建网站?
如何快速搭建二级域名独立网站?
如何基于云服务器快速搭建个人网站?
广德云建站网站建设方案与建站流程优化指南
微信小程序制作网站有哪些,微信小程序需要做网站吗?
建站为何优先选择香港服务器?
建站之星北京办公室:智能建站系统与小程序生成方案解析
如何快速打造个性化非模板自助建站?
网站制作公司,橙子建站是合法的吗?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
建站之星展会模版如何一键下载生成?
如何快速生成高效建站系统源代码?
山东云建站价格为何差异显著?
网站微信制作软件,如何制作微信链接?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
如何制作算命网站,怎么注册算命网站?
详解jQuery中基本的动画方法
*请认真填写需求信息,我们会在24小时内与您取得联系。