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

Windows下用python-lambda-local测试AWS Lambda函数本地报错(AWS环境正常)

解决Windows下python-lambda-local测试Lambda函数的异常问题

Hey,我看你在Windows 10上用python-lambda-local测试AWS Lambda时踩了俩坑:一个是系统兼容导致的运行错误,另一个是环境变量的传入逻辑问题,我来帮你一一拆解解决:

先搞定核心运行错误:AttributeError: module 'signal' has no attribute 'SIGALRM'

这个错误的本质是Windows系统不支持Unix/Linux专属的SIGALRM信号,而python-lambda-local的超时机制刚好依赖这个信号,所以在Windows上运行直接触发报错,后续的FrameSummary序列化错误是这个初始问题引发的连锁反应。

解决这个问题最简单的办法是修改库的超时处理代码,适配Windows环境:

  1. 找到你的python-lambda-local安装路径,比如你这里是c:\program files\python36\lib\site-packages\lambda_local\
  2. 打开timeout.py文件,把里面的代码替换成下面的内容:
import os
import sys

def time_limit(seconds):
    # 针对Windows系统跳过SIGALRM的超时检查
    if os.name == 'nt':
        yield
        return
    # Unix/Linux系统保留原有超时逻辑
    import signal
    def signal_handler(signum, frame):
        raise TimeoutException("Timed out!")
    signal.signal(signal.SIGALRM, signal_handler)
    signal.alarm(seconds)
    try:
        yield
    finally:
        signal.alarm(0)

class TimeoutException(Exception):
    pass
  1. 保存文件后重新运行测试命令,这个信号错误就会消失了。

再修正逻辑问题:环境变量未正确传入

从你的日志里看到Event: {'what_to_print1': 'Hello', 'how_many_times1': '2'},但你的代码是从os.environ(环境变量)读取what_to_print和how_many_times,这俩参数根本没传到环境变量里,所以即使运行正常,函数也会返回None。

要在Windows本地测试时传入环境变量,得用set命令临时设置:

set what_to_print=Hello && set how_many_times=2 && python-lambda-local -f lambda_handler lambda_handler.py event.json

这样你的函数就能正确读取到环境变量,执行循环打印的逻辑了。

额外推荐:用更兼容的官方工具

如果不想折腾修改源码,推荐用AWS官方的SAM CLI来做本地测试,它完全支持Windows,能精准模拟Lambda的运行环境,还能轻松处理环境变量、触发事件等,比python-lambda-local靠谱多了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:29:14