Lambda函数lambda_function.py第26行缩进不匹配语法错误求助
解决Lambda函数中的Python缩进语法错误
这个错误是Python里最常见的问题之一——缩进不匹配,Python对代码块的缩进要求非常严格,混合使用空格和制表符,或者缩进的空格数和外层代码块不一致,都会触发这个报错。针对你的情况,我给你几个具体的排查和修复步骤:
1. 定位第26行的缩进问题
报错明确指向了第26行,你需要重点检查这一行的缩进:
- 确认它所在的代码块(比如
try、循环、条件判断等)的外层缩进层级,比如如果它在try块里,就要和try下面的第一行代码(比如你写的print("Using waiter..."))保持完全相同的缩进数量。 - 绝对不要混合使用空格和制表符!很多时候这个错误都是因为一部分代码用了4个空格,另一部分用了Tab键,Python会把它们判定为不同的缩进长度。
2. 统一缩进风格
Python社区推荐使用4个空格作为标准缩进,Lambda运行环境也遵循这个规范。你可以:
- 把代码里所有的制表符(Tab)替换成4个空格;
- 确保每个代码块内的所有语句缩进一致,比如
try块里的waiter定义、wait()调用都要和上面的print语句对齐。
3. 修复后的代码示例
结合你提供的代码片段,修复缩进后的完整逻辑大概是这样(注意看try块内的缩进):
from __future__ import print_function import json import boto3 import time import urllib print('loading function') s3 = boto3.client('s3') def lambda_handler(event, context): bucket = event['Records'][0]['s3']['bucket']['name'] key = urllib.unquote_plus(event['Records'][0]['s3']['object']['key']) try: print("Using waiter to waiting for object to persist thru s3 service") # 以下代码和上面的print保持4个空格缩进 waiter = s3.get_waiter('object_exists') waiter.wait(Bucket=bucket, Key=key) # 后续业务逻辑也保持相同缩进 print(f"Successfully waited for object: {key} in bucket: {bucket}") except Exception as e: print(f"Error occurred: {str(e)}") raise e # 抛出异常让Lambda捕获
4. 辅助排查工具
你可以用文本编辑器的“显示空白字符”功能(比如VS Code里开启后,空格会显示为点,制表符显示为箭头),这样就能一眼看到是不是混合了不同的缩进符号。
按照上面的步骤检查第26行的缩进,统一整个文件的缩进风格,这个错误应该就能解决了。
内容的提问来源于stack exchange,提问作者Biswajeet Behera
相关产品推荐
相关产品推荐

