python 递归调用返回None的问题及解决方法


Posted in Python onMarch 16, 2020

今天在做python获取邮件时需要递归调用解析函数才可以解析邮件内容,最后想要将解析出的内容返回时发现返回的是None 可以内容却可以打印出来,很费解。后来在网上找到了解决方案,才想明白 在这里记录下。

原文:https://3water.com/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 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python升级提示Tkinter模块找不到的解决方法
Aug 22 Python
python动态网页批量爬取
Feb 14 Python
python中的break、continue、exit()、pass全面解析
Aug 05 Python
TensorFlow如何实现反向传播
Feb 06 Python
对numpy中布尔型数组的处理方法详解
Apr 17 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
Apr 27 Python
python实现一个简单的ping工具方法
Jan 31 Python
Python OpenCV 使用滑动条来调整函数参数的方法
Jul 08 Python
使用OpCode绕过Python沙箱的方法详解
Sep 03 Python
Python 实现递归法解决迷宫问题的示例代码
Jan 12 Python
Python3 selenium 实现QQ群接龙自动化功能
Apr 17 Python
Python Selenium自动化获取页面信息的方法
Aug 31 Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 #Python
django中的数据库迁移的实现
Mar 16 #Python
django之从html页面表单获取输入的数据实例
Mar 16 #Python
Django实现将views.py中的数据传递到前端html页面,并展示
Mar 16 #Python
Python Django view 两种return的实现方式
Mar 16 #Python
Python 统计位数为偶数的数字代码详解
Mar 15 #Python
使用pygame编写Flappy bird小游戏
Mar 14 #Python
You might like
深入php socket的讲解与实例分析
2013/06/13 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
PHP使用Redis替代文件存储Session的方法
2017/02/15 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
PHP函数积累总结
2019/03/19 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
2020/05/29 PHP
document.documentElement的一些使用技巧
2013/04/18 Javascript
js弹出div并显示遮罩层
2014/02/12 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
Javascript显示和隐藏ul列表的方法
2015/07/15 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
2017/03/03 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
基于form-data请求格式详解
2019/10/29 Javascript
Javascript异步流程控制之串行执行详解
2020/09/27 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
python三大神器之fabric使用教程
2019/06/10 Python
利用python实现周期财务统计可视化
2019/08/25 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
JPA的优势都有哪些
2013/07/04 面试题
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
高三复习计划
2015/01/19 职场文书
会议通知格式范文
2015/04/15 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript