You need to enable JavaScript to run this app. 编写Python函数时触发IndentationError缩进报错的原因及解决方法
优惠活动
大模型
产品
解决方案
定价
更多

编写Python函数时触发IndentationError缩进报错的原因及解决方法

IndentationError: unindent does not match any outer indentation level 修复方案

Python对缩进的强制要求比大部分语言严格:同一个代码块内的所有同级语句,必须保持完全一致的缩进量。当某一行代码的缩进既对不上它所属的上级代码块的缩进规则,也不属于任何已声明的代码层级时,就会抛出这个报错。

你提交的代码里的具体问题

  • customerdetails()函数内部的7行input赋值语句,用了6个空格做缩进,没有统一遵循Python通用的4空格缩进规范
  • 末尾的customerdetails()调用行缩进为4个空格,和上方6空格的函数体缩进完全错位,直接触发缩进匹配失败的报错
  • 调用代码被错误嵌在函数定义内部,就算把缩进改对,也会因为函数内直接自调用触发无限递归,最终因超出最大递归深度报错。

整改操作步骤

  • 统一缩进标准:所有代码块内的同级语句统一使用4个空格缩进,不混用Tab键和长度不一的空格
  • 调整函数体缩进:把7行input赋值语句的6空格缩进调整为4空格,匹配函数定义块的缩进规则
  • 把函数调用语句移出函数定义块,做顶格处理(0缩进),放在函数定义完成后的全局作用域下。后续需要反复调用时,直接在全局作用域写对应的调用代码即可,不需要嵌套在函数内部
  • 给函数增加返回逻辑,把收集到的客户信息返回出去,方便后续反复调用时直接读取、处理数据

整改完成的可运行代码

def customerdetails():
    Firs_tname = input("Enter your First name:")
    Last_name = input("Enter your last name:")
    Age = input("Age:")
    Address =input("Enter your address:")
    Postcode = input("Enter your Postcode:")
    Email = input("Email:")
    Phone = int(input("Phone Number:"))
    # 返回收集到的客户全量信息,适配后续反复调用取数的需求
    return {
        "first_name": Firs_tname,
        "last_name": Last_name,
        "age": Age,
        "address": Address,
        "postcode": Postcode,
        "email": Email,
        "phone": Phone
    }

# 全局作用域下的调用逻辑,按需写多次调用即可
# 示例:连续调用两次收集两个用户的信息
user1_info = customerdetails()
user2_info = customerdetails()

避坑提示

  • 在代码编辑器里打开“显示空白字符”功能,能清晰区分Tab和空格的缩进差异,从根源上避免同类缩进报错
  • 不要把函数自身的调用写在函数体内部,除非是刻意实现的递归逻辑且设置了明确的递归终止条件

内容的提问来源于stack exchange,提问作者Savo Rodrigues

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 01:45:00