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 相关文章推荐
Saltstack快速入门简单汇总
Mar 01 Python
numpy.transpose对三维数组的转置方法
Apr 17 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
Jun 20 Python
Python中的CSV文件使用&quot;with&quot;语句的方式详解
Oct 16 Python
python实现自动解数独小程序
Jan 21 Python
python Jupyter运行时间实例过程解析
Dec 13 Python
Python 文件数据读写的具体实现
Jan 24 Python
flask框架渲染Jinja模板与传入模板变量操作详解
Jan 25 Python
python opencv 检测移动物体并截图保存实例
Mar 10 Python
简单了解pytest测试框架setup和tearDown
Apr 14 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
Apr 20 Python
浅谈Python __init__.py的作用
Oct 28 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
BBS(php &amp; mysql)完整版(三)
2006/10/09 PHP
PHP注释实例技巧
2008/10/03 PHP
php 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
PHP函数microtime()用法与说明
2013/12/04 PHP
php中数字、字符与对象判断函数用法实例
2014/11/26 PHP
PHP实现连接设备、通讯和发送命令的方法
2015/10/13 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
2016/08/21 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
php 修改密码实现代码
2017/05/24 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
python爬取网站数据保存使用的方法
2013/11/20 Python
纯Python开发的nosql数据库CodernityDB介绍和使用实例
2014/10/23 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
python生成lmdb格式的文件实例
2018/11/08 Python
python 实现语音聊天机器人的示例代码
2018/12/02 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
在python中画正态分布图像的实例
2019/07/08 Python
详解Django 时间与时区设置问题
2019/07/23 Python
py-charm延长试用期限实例
2019/12/22 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
python Pexpect模块的使用
2020/12/25 Python
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
html5的input的required使用中遇到的问题及解决方法
2018/04/24 HTML / CSS
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
美国知名生活购物网站:Goop
2017/11/03 全球购物
美国温暖商店:The Warming Store
2018/12/15 全球购物
yy结婚证婚词
2014/01/10 职场文书
公司股东合作协议书
2014/09/14 职场文书
查摆剖析材料范文
2014/09/30 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
2019最新劳动仲裁申请书!
2019/07/08 职场文书