编写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
相关产品推荐
相关产品推荐

