python 递归调用返回None的问题及解决方法
作者:Clannad_niu 时间:2022-12-21 05:52:56
今天在做python获取邮件时需要递归调用解析函数才可以解析邮件内容,最后想要将解析出的内容返回时发现返回的是None
可以内容却可以打印出来,很费解。后来在网上找到了解决方案,才想明白 在这里记录下。
原文:https://www.jb51.net/article/182765.htm
原始测试代码如下:
def print_info(msg, indent=0):
if indent == 0:
for header in ['From', 'To', 'Subject']:
value = msg.get(header, '')
if value:
if header == 'Subject':
value = decode_str(value)
else:
hdr, addr = parseaddr(value)
name = decode_str(hdr)
value = u'%s <%s>' % (name, addr)
print('%s%s: %s' % (' ' * indent, header, value))
if msg.is_multipart():
parts = msg.get_payload()
for n, part in enumerate(parts):
print('%spart %s' % (' ' * indent, n))
print('%s--------------------' % (' ' * indent))
print_info(part, indent + 1) #这里是没有返回的
else:
content_type = msg.get_content_type()
if content_type=='text/plain' or content_type=='text/html':
content = msg.get_payload(decode=True)
charset = guess_charset(msg)
if charset:
content = content.decode(charset)
print('%sText: %s' % (' ' * indent, content))
return content
else:
print('%sAttachment: %s' % (' ' * indent, content_type))
这样的方式返回的content是None。
修改方式如下:
def print_info(msg, indent=0):
if indent == 0:
for header in ['From', 'To', 'Subject']:
value = msg.get(header, '')
if value:
if header == 'Subject':
value = decode_str(value)
else:
hdr, addr = parseaddr(value)
name = decode_str(hdr)
value = u'%s <%s>' % (name, addr)
print('%s%s: %s' % (' ' * indent, header, value))
if msg.is_multipart():
parts = msg.get_payload()
for n, part in enumerate(parts):
print('%spart %s' % (' ' * indent, n))
print('%s--------------------' % (' ' * indent))
return print_info(part, indent + 1) 在递归调用时直接返回函数本身
else:
content_type = msg.get_content_type()
if content_type=='text/plain' or content_type=='text/html':
content = msg.get_payload(decode=True)
charset = guess_charset(msg)
if charset:
content = content.decode(charset)
print('%sText: %s' % (' ' * indent, content))
return content
else:
print('%sAttachment: %s' % (' ' * indent, content_type))
区别在于递归调用的时候,要将函数本身一起返回。这样就可以将最后的递归结果一点一点返回,可以解决返回的结果为None
的问题。
来源:https://blog.csdn.net/Clannad_niu/article/details/104792426
标签:python,递归,None
0
投稿
猜你喜欢
Python递归求出列表(包括列表中的子列表)的最大值实例
2023-01-17 06:02:16
一文让你彻底搞懂Python中__str__和__repr__
2021-10-30 20:09:56
Javascript this 关键字 详解
2024-06-07 15:51:18
JavaScript原生对象常用方法总结(推荐)
2024-05-05 09:15:20
python Task在协程调用实例讲解
2021-06-28 21:39:32
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2023-08-03 10:29:49
Pandas的AB BA类型数据框去重复
2022-09-26 07:48:16
JSP学生信息管理系统
2024-03-20 22:28:27
IntelliJ IDEA卡死,如何优化内存
2023-07-04 12:10:27
Git 标签使用详解
2023-09-06 14:09:32
python 读写excel文件操作示例【附源码下载】
2023-02-20 09:26:31
oracle 优化的一点体会
2009-10-02 17:59:00
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2022-04-27 11:35:12
python实现图片中文字分割效果
2023-03-11 16:39:42
Python中if __name__ == "__main__"详细解释
2023-10-16 06:36:56
轻松解决:mysql数据库连接过多的错误
2010-09-30 14:28:00
Javascript中各种trim的实现详细解析
2024-04-18 10:55:04
在Python中使用dict和set方法的教程
2023-12-20 20:29:07
MySql 5.7.21免安装版本win10下的配置方法
2024-01-23 00:45:35
python笔记之使用fillna()填充缺失值
2023-12-22 19:53:49