Python最常见的10个坑

相比于其他语言,Python的语法比较简单易学,但一旦不注意细节,刚入门的新手就会掉进语法错误的坑里。

今天给大家讲几个平常比较容易掉的“坑”。

1、忘记写冒号

在 if、elif、else、for、while、class、def语句后面忘记添加 “ : ”

num = 18

if num == 12

print('欢迎学习 python')

改正:

num = 18

if num == 12:

print('欢迎学习 python')

2、误用 “=” 做等值比较

“=”是给变量赋值,“==”才是判断两个值是否相等:

def animal(pet):

if pet = 'cat':

return '猫'

if pet = 'dog':

return '狗'

print(animal('cat'))

改正:

def animal(pet):

if pet == 'cat':

return '猫'

if pet == 'dog':

return '狗'

print(animal('cat'))

3、变量没有定义

if age >= 18:

print('大于18岁')

print('END')

会导致:“NameError: name 'age' is not defined.”

改正:

age = 20

if age >= 18:

print('大于18岁')

print('END')

4、字符串与非字符串连接

错误:

num = 3

print('I have '+num+'orange.')

报错信息如下:

TypeError: can only concatenate str (not "int") to str

非字符串和字符串连接的时候,要将非字符串转换为字符串类型之后才能连接。

改正:

num = 3

print('I have '+str(num)+' orange.')

大家来猜一猜输出

1 + int('1')

'1' + str(1)

会有怎样不同的结果呢?

1 + int('1')  输出的结果是 2。

'1' + str(1) 的输出结果是 11。

5、列表的索引位置

有些同学会习惯性地认为列表元素的位置是从 1 开始的:

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

print(spam[3])

系统这时就会提示:"IndexError: list index out of range"

可别忘了,列表元素的位置是从 0 开始的,所以第 3 个元素 “mouse” 的索引位置是 2。

改正:

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

print(spam[2])

python改为后输出为:mouse

6、使用自增 “++” 自减 “--”

学过 C 语言或者 Java 的人会很习惯使用i++或者i--,但在 Python 中是没有自增自减操作符的:

spam = 0

spam++

这时可以使用 “+=” 来代替 “++”

改正:

spam = 0

spam += 1

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函数来获取列表的长度:

animal = ['dog', 'cat', 'mouse']

for i in range(animal):

print(animal[i])

报错信息如下:

TypeError: 'list' object cannot be interpreted as an integer

改正:

animal = ['dog', 'cat', 'mouse']

for i in range(len(animal)):

print(animal[i])

9、函数中的局部变量赋值前被使用:

num = 42

def myFunction():

print(num)

num = 100

myFunction()

第一行定义了一个全局变量 num ,函数 myFunction( )也定义了一个同名的局部变量num ,

程序执行时是先查找局部变量的num ,在函数中找到 num 之后就不到外部查找了,此时就会出现 print 的时候变量 num 还没赋值的错误。

报错信息如下:

UnboundLocalError: local variable 'num' referenced before assignment

python改正代码如下:

num = 42

def myFunction():

print(num)

# num = 100

或者

num = 42

def myFunction():

num = 100

print(num)

10、缩进问题

和其他语言的语法最大的不同就是,Python 不能用括号来表示语句块,也不能用开始或结束标志符来表示,而是靠缩进来区分代码块的。

常见的错误用法:

(1)第一种

print('xinbiancheng.cn')

print('新编程')

错误是第二行的缩进会导致两个print语句是包含和被包含的关系,但他们两者是属于同一个代码块的,所以应该写成:

print('xinbiancheng.cn')

print('新编程')

(2)第二种

num = 12

if num == 12:

print('xinbiancheng.cn')

print('新编程')

错误是第三行的缩进,改正的方法有两种。

一是如果两个 print 语句是属于同一代码块的,应该改正为:

num = 12

if num == 12:

print('xinbiancheng.cn')

print('新编程')

二是如果第三行的 print 语句是和 if 语句是同一级的,则改正为:

num = 12

if num == 12:

print('xinbiancheng.cn')

print('新编程')

(3)第三种

在Python 3 中,缩进的时候,不能 Tab 和空格混用,每个缩进层次应该选择只使用 Tab 或者只使用空格。

你遇到Python的这些坑了吗?