函数crear_bd报unexpected indent错误,新手求排查(含unindent问题)
嘿,我来帮你一步步排查这些问题!
先解决缩进错误的常见诱因
你遇到的unexpected indent和unexpected unindent错误,大多和Python严格的缩进规则有关,新手很容易踩这些坑:
- 混合空格与制表符:Python要求同一代码块的缩进必须统一,不能一部分用空格、一部分用Tab。建议打开编辑器的「显示空白字符」功能(VS Code、PyCharm等主流编辑器都有这个选项),就能直观看到缩进是空格还是Tab,然后统一改成4个空格(Python社区的通用规范)。
- 缩进层级不统一:比如同一个
try块、函数体里的代码,每一行的缩进量必须完全一致。你贴的代码里cursor.execute那行看起来没问题,但要确认整个try块内的所有代码缩进层级相同。 - 无意义的缩进/取消缩进:比如
crear_bd()应该和def agregar_categoria():处于同一层级(顶格),如果不小心给它加了缩进,就会触发错误;反过来,如果某个代码块(比如while循环内的代码)本该缩进却没缩进,也会报错。另外别忘了检查你没贴出来的crear_bd()函数内部,是不是有某行代码缩进突然变多或变少。
顺便帮你修正代码里的SQL问题
除了缩进,你的插入语句也有问题,这可能会导致后续运行报错:
- 错误的SQL语法:你写的
INSERT INTO categoria (null, '{}')不符合规范。如果你的categoria表主键是自增字段,不需要手动传null,数据库会自动生成。正确的参数化写法(还能避免SQL注入)应该是这样:# 假设表中有一个存储分类名称的列叫nombre,根据你的实际表结构调整 cursor.execute("INSERT INTO categoria (nombre) VALUES (?)", (categoria,)) - 未处理异常的连接泄漏:你的
try块没有对应的except或finally,如果执行出错,数据库连接可能无法正常关闭。可以修改成这样:def agregar_categoria(): categoria = input("¿Como quieres nombrar a la nueva categoria?\n> ") conexion = sqlite3.connect("restaurante.db") cursor = conexion.cursor() try: cursor.execute("INSERT INTO categoria (nombre) VALUES (?)", (categoria,)) conexion.commit() print("Categoría agregada exitosamente!") except Exception as e: print(f"Ocurrió un error: {e}") conexion.rollback() # 出错时回滚操作 finally: conexion.close() # 无论成功失败都关闭连接
快速排查缩进问题的步骤
- 打开编辑器的「显示空白字符」,检查所有缩进处是否统一用空格或Tab;
- 核对
crear_bd()函数的定义(你没贴的部分),确保函数内所有代码都比def crear_bd():多一层缩进; - 全局检查代码层级:函数定义顶格,函数体缩进一层;
crear_bd()、while True:和函数定义顶格对齐;while循环内的print、input缩进一层。
按这个思路排查,应该能快速定位缩进问题~
内容的提问来源于stack exchange,提问作者Jesus Ivan Verdugo
相关产品推荐
相关产品推荐

