You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数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()  # 无论成功失败都关闭连接
    
快速排查缩进问题的步骤
  1. 打开编辑器的「显示空白字符」,检查所有缩进处是否统一用空格或Tab;
  2. 核对crear_bd()函数的定义(你没贴的部分),确保函数内所有代码都比def crear_bd():多一层缩进;
  3. 全局检查代码层级:函数定义顶格,函数体缩进一层;crear_bd()、while True:和函数定义顶格对齐;while循环内的print、input缩进一层。

按这个思路排查,应该能快速定位缩进问题~

内容的提问来源于stack exchange,提问作者Jesus Ivan Verdugo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 14:57:30