我整理了 Python新手 最容易犯错的 10个坑!
共 1440字,需浏览 3分钟
· 2020-09-10
相比于其他语言,Python 的语法比较简单易学,但一旦不注意细节,刚入门的新手就会掉进语法错误的坑里。今天给大家讲几个平常比较容易掉的“坑”。
1、忘记写冒号
在 if、elif、else、for、while、class、def 语句后面忘记添加 “ : ”
![](https://filescdn.proginn.com/e16ac6b5ad8414ed98bebbf2337ad29d/7dce4dc3c0b542f48578d3fc4d28bd28.webp)
2、误用 “=” 做等值比较
“=”是给变量赋值,“==”才是判断两个值是否相等:
![](https://filescdn.proginn.com/d562b8d90a7ce89be977727c537146fe/becf167d24e3a59ec6ae36bbf8f22a4f.webp)
改正:
![](https://filescdn.proginn.com/5b194960a4b5fd6ebdc5e66c8677858b/c721662143232724389b44037e45e7ce.webp)
3、变量没有定义
![](https://filescdn.proginn.com/a33924688bdaa591853876525b26a764/50321ef78a4b245687f7b460a8b5b885.webp)
会导致:“NameError: name 'age' is not defined.”
改正:
![](https://filescdn.proginn.com/620f3c78c2e5765400fe6391dae11c6b/bd68eea58733bae3a43cb39431074f85.webp)
4、字符串与非字符串连接
错误:
![](https://filescdn.proginn.com/10974bbb3a3fc859ca872e609bdba757/b77c9eb84083708dbe20f56e832ebb27.webp)
非字符串和字符串连接的时候,要将非字符串转换为字符串类型之后才能连接。
改正:
![](https://filescdn.proginn.com/f729387d150802a4720e7008cdd3dbfa/9c02e2288125892ecdca1582a82e92ef.webp)
大家来猜一猜输出
1 + int(‘1’)
‘1’ + str(1)
会有怎样不同的结果呢?
![](https://filescdn.proginn.com/584ba3511dace478861f487ade3294cd/2fbecf4d15ffba6697d8b0fc4a589809.webp)
1 + int(‘1’) 输出的结果是 2。
![](https://filescdn.proginn.com/ec9892ffeaa9f9199059699f3e23a67a/41911b1e4afe5d446ceba90bcd12954d.webp)
‘1’ + str(1) 的输出结果是 11。
5、列表的索引位置
有些同学会习惯性地认为列表元素的位置是从 1 开始的:
![](https://filescdn.proginn.com/2568c92dd43a638f3a247291ec56bd5a/6337e111903df019856e168e49eab774.webp)
系统这时就会提示:"list index out of range."
可别忘了,列表元素的位置是从 0 开始的,所以第 3 个元素 “mouse” 的索引位置是 2。
改正:
![](https://filescdn.proginn.com/109bae0d33617aba3347d26f55bbb26e/aa9bc50efeae6ccb6bb6b8e75ff2ae34.webp)
6、使用自增 “++” 自减 “--”
学过 C 语言或者 Java 的人会很习惯使用i++或者i--,但在 Python 中是没有自增自减操作符的:
![](https://filescdn.proginn.com/a586d349572f8d0df42b198a97d12355/d4a176af1dc06a4ac252ef37aa60baa3.webp)
这时可以使用 “+=” 来代替 “++”
改正:
![](https://filescdn.proginn.com/98b5b4d984e2f193d627c3ccf82f9991/d52809280f76bcbe12c56efd637ac35f.webp)
7、 使用关键字命名变量
Python 3 中一共 33 个关键字:
?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?
自定义变量时,变量名不能和这些关键字重复。
8、 索引元素位置时忘记调用 len 方法
通过索引位置来获取列表元素时,忘记要先使用 len 函数来获取列表的长度:
![](https://filescdn.proginn.com/12e8330f3a04129166a1beccb24e28bb/5313aa79f66a6eac13fe04b888e4d006.webp)
改正:
![](https://filescdn.proginn.com/a075b89bdc1feb3c9cad0102ea4cc943/28c9927e13960830a26304a5f4c914c5.webp)
9、函数中的局部变量赋值前被使用:
![](https://filescdn.proginn.com/05389a55e27ad12042ba6b5d27e15795/a7227104073a41e509f489c0d27914cb.webp)
第一行定义了一个全局变量 num ➡️函数 myFunction( )也定义了一个同名的局部变量➡️程序执行时是先查找局部变量的➡️在函数中找到 num 之后就不到外部查找了➡️此时就会出现 print 的时候变量 num 还没赋值的错误。
10、缩进问题
和其他语言的语法最大的不同就是,Python 不能用括号来表示语句块,也不能用开始或结束标志符来表示,而是靠缩进来区分代码块的。
常见的错误用法:
(1)第一种
![](https://filescdn.proginn.com/3904445c791f4579f76bde97f448c78f/76036c2def97027d12a0a8b8161b1731.webp)
错误是第二行的缩进会导致两个print语句是包含和被包含的关系,但他们两者是属于同一个代码块的,所以应该写成:
![](https://filescdn.proginn.com/4a101e947fa547bd061148de6c439944/58d8feddf3cb980ef357d88d27159f55.webp)
(2)第二种
![](https://filescdn.proginn.com/7e624f97da89a82a939f116cd186aad4/3ab3af420366485ebe7b07877234ace5.webp)
错误是第三行的缩进,改正的方法有两种。
一是如果两个 print 语句是属于同一代码块的,应该改正为:
![](https://filescdn.proginn.com/092c1a74873af74b94118fdaa2893154/f6ef0eff61d68523f1a98ea4d84f0df0.webp)
二是如果第三行的 print 语句是和 if 语句是同一级的,则改正为:
![](https://filescdn.proginn.com/3ec9392a351bb285f6f242937b07e831/ff0699a2af25ecef491c5cf05d014748.webp)
(3)第三种
在Python 3 中,缩进的时候,不能 Tab 和空格混用,每个缩进层次应该选择只使用 Tab 或者只使用空格。