python 递归调用返回None的问题及解决方法
作者:Clannad_niu
这篇文章主要介绍了python 递归调用返回None的问题,本文通过实例代码给大家记录了解决方案,代码简单易懂,非常不错对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
今天在做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
的问题。
总结
到此这篇关于python 递归调用返回None的问题及解决方法的文章就介绍到这了,更多相关python 递归返回None 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!