上周同事发来一段Python脚本,我打开一看,缩进乱得像刚被猫踩过的键盘——有的地方用4个空格,有的混着Tab,还有一行缩进7个空格。运行直接报错:IndentationError: unindent does not match any outer indentation level。这不是个别现象,很多新手甚至老手,在写代码时对缩进抱着“差不多就行”的心态,结果调试半小时,问题出在看不见的空白字符上。
缩进不是排版,是语法的一部分
在Python里,缩进不是为了好看,而是定义代码块的唯一方式。没有花括号,没有begin/end,靠的就是缩进层级。比如这段:
if user.is_active:
print("欢迎回来")
if user.has_profile:
update_last_login()第二行和第三行必须严格对齐,第四行要比第三行多缩进一层。少一个空格、多一个Tab,解释器立马翻脸。
空格 vs Tab:选一个,然后坚持到底
主流编辑器(VS Code、PyCharm、Sublime)默认都能把Tab自动转成空格。建议统一用4个空格——这是PEP 8官方推荐,也是绝大多数开源项目的事实标准。别用Tab,尤其别混用。因为不同编辑器对Tab宽度的解读可能不同(有的显示为2格,有的是4格,有的甚至8格),协作时极易错位。
在VS Code中,点右下角的“Spaces:4”就能切换;PyCharm则在Settings → Editor → Code Style → Python里勾选“Use tab character”取消即可。
其他语言也不能随便缩进
JavaScript虽然不靠缩进来定义作用域,但混乱缩进会让逻辑难以追踪。比如这段:
function handleLogin(data) {
if (data.token) {
saveToken(data.token);
redirect('/dashboard');
} else {
alert('登录失败');
clearForm();
}
}看着就累。改成标准2空格缩进后,结构一目了然:
function handleLogin(data) {
if (data.token) {
saveToken(data.token);
redirect('/dashboard');
} else {
alert('登录失败');
clearForm();
}
}HTML/CSS同样如此。嵌套<div>时,每层子元素缩进一次,删错一个空格可能让整个布局塌掉。
小动作,大改变
每天写代码前,顺手检查编辑器设置:是否启用“自动缩进”、是否开启“显示空白字符”(那个小点点图标)。遇到别人写的代码缩进异常?别硬改,先用编辑器的“Convert Indentation to Spaces”一键统一。团队项目里,加个.editorconfig文件,几行配置就能让所有人缩进行为一致:
root = true
[*.py]
indent_style = space
indent_size = 4
[*.js]
indent_style = space
indent_size = 2