Python新手常见四大坑:缩进错误(须统一4空格)、变量未定义即使用(需先赋值后调用)、可变对象作默认参数(应改用None+内部初始化)、字符串与数字混拼(推荐f-string)。

刚学Python时踩的坑,往往不是语法多难,而是细节没注意、习惯没养成。下面这些错误,90%的新手都遇到过,搞懂它们,能少走半年弯路。
缩进错误:Python的“呼吸感”不能乱
Python靠缩进来定义代码块,而不是大括号。空格和Tab混用、多缩进或少缩进,都会直接报 IndentationError。
- 统一用4个空格(别用Tab),编辑器设为“Tab转为空格”
- 复制别人代码时,粘贴后检查缩进是否整齐——尤其if/for/def后面冒号后的下一行
- 报错提示里写的行号,往往是缩进出问题的下一行,往前看才对
变量未定义就使用:名字还没“出生”,你就喊它
写完a = 5,却在前面就print(a),会报 NameError: name 'a' is not defined。这不是拼写错误,是执行顺序问题。
- Python从上到下逐行执行,变量必须先赋值再使用
- 函数内部用的变量,如果想用外面的,记得加 global 声明(但初学者建议先避免全局变量)
- 调试时在报错行前加 print(type(x)) 或 dir(),快速确认变量是否存在、是否拼错
可变对象当默认参数:悄悄改掉你的函数“底子”
写 def func(items=[]),第一次调用正常,第二次调用发现 items 里多了上次的数据——这是经典陷阱。
立即学习“Python免费学习笔记(深入)”;
- 默认参数在函数定义时就生成一次,且只生成一次。列表、字典等可变对象会持续被修改
- 正确写法:用 None 作默认值,函数内再初始化:def func(items=None): items = items or []
- 字符串、数字、None 等不可变类型当默认参数是安全的
字符串拼接与格式化:+号很顺手,但容易翻车
用 + 拼接字符串和数字,比如 "age: " + 25,会报 TypeError:不能把str和int直接相加。
- 数字转字符串用 str(25),或改用 f-string:f"age: {25}"(推荐,清晰又高效)
- 用 % 或 .format() 也行,但f-string是Python 3.6+首选,支持表达式、函数调用
- 拼接大量字符串时,用 ''.join(list) 比反复 + 更快(虽新手阶段影响不大,但早知道不踩坑)
这些错误看着小,但卡住新手最久。不是你不会,是Python把“隐含规则”摆得特别直——缩进即逻辑,顺序即流程,对象特性决定行为。多练几次,自然就形成肌肉记忆了。










