「踩坑日记」:Python新手最容易犯的10个错误
前言
大家好,我是第一程序员(名字大,人很菜)。作为一个正在学习Rust的转码萌新,最近我开始学习Python。在学习过程中,我踩了很多坑,今天我想分享一下Python新手最容易犯的10个错误,希望能帮助到和我一样的同学。
一、错误1:缩进错误
1.1 错误示例
def greet():
print("Hello, world!")
return "Greeted"
1.2 错误原因
Python使用缩进来表示代码块,而不是大括号。缩进不一致会导致语法错误。
1.3 解决方案
- 使用4个空格或1个制表符进行缩进
- 保持缩进一致,不要混合使用空格和制表符
- 使用IDE或编辑器的自动缩进功能
二、错误2:变量命名错误
2.1 错误示例
1variable = 10
my-variable = 20
class = "Python"
2.2 错误原因
- Python变量名不能以数字开头
- Python变量名不能包含连字符
class是Python的关键字,不能用作变量名
2.3 解决方案
- 变量名只能包含字母、数字和下划线
- 变量名不能以数字开头
- 变量名不能使用Python关键字
- 建议使用蛇形命名法(snake_case)
三、错误3:字符串拼接错误
3.1 错误示例
name = "张三"
age = 20
print("我的名字是" + name + ",年龄是" + age)
3.2 错误原因
在Python中,不能直接将字符串和整数拼接在一起。
3.3 解决方案
- 使用字符串格式化
print(f"我的名字是{name},年龄是{age}") - 使用str()函数转换
print("我的名字是" + name + ",年龄是" + str(age))
四、错误4:列表索引错误
4.1 错误示例
numbers = [1, 2, 3, 4, 5]
print(numbers[5])
4.2 错误原因
Python列表的索引从0开始,所以最后一个元素的索引是len(list)-1。
4.3 解决方案
- 记住列表索引从0开始
- 使用负索引访问末尾元素:
numbers[-1] - 使用
len()函数获取列表长度
五、错误5:循环变量修改错误
5.1 错误示例
for i in range(5):
print(i)
i = i + 1
5.2 错误原因
在for循环中,循环变量会被自动重新赋值,手动修改循环变量不会影响循环的执行。
5.3 解决方案
- 不要在for循环中修改循环变量
- 如果需要控制循环,可以使用while循环
六、错误6:函数定义错误
6.1 错误示例
def add(a, b)
return a + b
6.2 错误原因
函数定义后面缺少冒号。
6.3 解决方案
- 函数定义后面必须加上冒号
- 函数体必须缩进
七、错误7:模块导入错误
7.1 错误示例
import numpy
print(numpy.array([1, 2, 3]))
# 或者
from pandas import DataFrame
print(dataframe([1, 2, 3]))
7.2 错误原因
- 模块名或函数名拼写错误
- 导入后使用了错误的名称
7.3 解决方案
- 确保模块已安装:
pip install 模块名 - 检查模块名和函数名的拼写
- 使用正确的导入方式
八、错误8:文件操作错误
8.1 错误示例
file = open("data.txt", "r")
data = file.read()
# 忘记关闭文件
8.2 错误原因
文件打开后没有关闭,可能导致资源泄漏。
8.3 解决方案
- 使用with语句自动关闭文件
with open("data.txt", "r") as file: data = file.read() # 文件会自动关闭 - 手动关闭文件:
file.close()
九、错误9:异常处理错误
9.1 错误示例
try:
result = 10 / 0
except:
print("发生错误")
9.2 错误原因
捕获所有异常会隐藏具体的错误信息,不利于调试。
9.3 解决方案
- 捕获具体的异常类型
try: result = 10 / 0 except ZeroDivisionError: print("除数不能为零") - 可以同时捕获多个异常
try: result = 10 / 0 except (ZeroDivisionError, ValueError) as e: print(f"发生错误: {e}")
十、错误10:可变默认参数错误
10.1 错误示例
def add_item(item, items=[]):
items.append(item)
return items
print(add_item(1)) # 输出: [1]
print(add_item(2)) # 输出: [1, 2]
print(add_item(3)) # 输出: [1, 2, 3]
10.2 错误原因
Python的默认参数在函数定义时只计算一次,所以可变默认参数会在多次调用之间保持状态。
10.3 解决方案
- 使用None作为默认值,然后在函数内部创建新的列表
def add_item(item, items=None): if items is None: items = [] items.append(item) return items
十一、从Rust开发者角度的思考
11.1 与Rust的对比
- 类型系统:Python是动态类型,Rust是静态类型
- 错误处理:Python使用异常,Rust使用Result类型
- 内存管理:Python使用自动垃圾回收,Rust使用所有权系统
- 语法:Python使用缩进而不是大括号
11.2 学习建议
- 保持警惕:Python的动态类型和灵活语法可能会导致一些隐蔽的错误
- 写测试:编写测试可以帮助发现错误
- 使用类型提示:使用Python的类型提示功能提高代码可读性
- 学习最佳实践:了解Python的最佳实践,避免常见错误
十二、总结
作为一个Python新手,踩坑是不可避免的。通过了解这些常见错误,你可以避免很多不必要的麻烦,提高学习效率。
记住,编程是一个不断学习和实践的过程。不要害怕犯错,每一个错误都是学习的机会。通过不断地实践和总结,你会逐渐掌握Python的精髓。
保持学习,保持输出。虽然现在我还是个菜鸡,但我相信只要坚持,总有一天能成为真正的「第一程序员」!

1171

被折叠的 条评论
为什么被折叠?



