python新手常见五大陷阱:缩进必须统一用4空格;变量名拼写、作用域或分支定义不全致nameerror;可变对象不可作默认参数,应改用none初始化;字符串拼接需类型一致,f-string调用方法勿漏括号。

Python新手常因忽略语言特性或惯性思维掉进“看似合理实则报错”的坑里。这些错误不难解决,但容易反复出现、耽误学习节奏。
缩进不当:不是风格问题,是语法硬性要求
Python用缩进来定义代码块,而非大括号。混用空格和Tab、缩进多一层或少一层,都会直接触发IndentationError或TabError。
- 编辑器务必设为“显示空白字符”,确认统一用4个空格(PEP 8推荐)
- 复制他人代码时,粘贴后全选→重新缩进(多数编辑器支持Ctrl+Shift+I或Cmd+Shift+I)
- 不要手动敲Tab键——IDE通常会自动转成空格;若手动敲了,检查设置里是否启用了“Tab转空格”
变量未定义就使用:名字错了、拼写漏了、作用域搞混了
NameError: name 'xxx' is not defined 是新手最高频报错。常见原因有三种:
- 变量名打错:比如定义了
user_name,却写了username(少下划线) - 在函数内修改全局变量但没声明:
count = 0在函数外,函数里写count += 1会报错,需加global count - 条件分支中只在某一分支定义变量:if里赋值了
result,else没赋,后续直接用就会报错
可变对象当默认参数:函数多次调用结果“串了”
写def add_item(item, lst=[]): lst.append(item); return lst看似正常,但第二次调用会发现列表里有前一次的元素——因为[]在函数定义时只创建一次,后续每次调用都复用同一个列表对象。
立即学习“Python免费学习笔记(深入)”;
- 正确写法:用
None作默认值,函数内再初始化:def add_item(item, lst=None): if lst is None: lst = [] - 这个坑对字典、集合等可变类型同理,切记:所有可变对象都不该当默认参数
字符串拼接与格式化误用:+ 和 f-string 混搭出错
想打印"年龄:" + age,但age是整数,会报TypeError: can only concatenate str...;又或者用f-string时写成f"姓名:{name.upper}"(漏了括号),结果输出的是方法对象地址而非大写字符串。
- 拼接前统一转成字符串:
"年龄:" + str(age) - f-string里调用方法必须带括号:
f"姓名:{name.upper()}" - 不确定类型时,优先用f-string或
.format(),它们会自动做类型转换










