Email_Listener库无法按预期传递函数参数,求助原因解析
Email_Listener 函数参数传递问题解决
问题原因分析
"name 'write_json_file' is not defined" 错误
你直接使用write_json_file但未提前导入该函数,原作者的示例默认你已经通过from email_processing import write_json_file将函数导入当前命名空间,而你没做这一步,Python自然找不到这个名称。"write_json_file()缺少两个关键字参数" 错误
你写email_processing.write_json_file()时加了括号,这是直接调用函数,而process_function参数需要的是函数对象本身(即不带括号的函数名)。加括号后Python会立即执行函数,而write_json_file需要接收邮件内容和保存路径两个参数,此时没传参就会报错。
正确用法
两种方式任选其一:
- 方式一:先导入函数再传参
from email_processing import write_json_file el.listen(timeout, process_function=write_json_file)
- 方式二:直接传递模块下的函数对象(无需单独导入)
el.listen(timeout, process_function=email_processing.write_json_file)
原作者用法为何失效
原作者的文档可能默认项目的__init__.py已经将email_processing里的处理函数导出到包的顶层命名空间,但实际项目的__init__.py没做这个配置,所以你直接用函数名会找不到。你修改__init__.py导入函数的方式,本质是手动把函数加到了包的命名空间里,所以能正常使用,但这不是原作者示例的预设用法。
内容的提问来源于stack exchange,提问作者TxTechnician
相关产品推荐
相关产品推荐

