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迭代器实例简析
Sep 25 Python
python简单读取大文件的方法
Jul 01 Python
Python实现树的先序、中序、后序排序算法示例
Jun 23 Python
在CentOS6上安装Python2.7的解决方法
Jan 09 Python
Python使用gRPC传输协议教程
Oct 16 Python
python用类实现文章敏感词的过滤方法示例
Oct 27 Python
python 实现单通道转3通道
Dec 03 Python
python plotly画柱状图代码实例
Dec 13 Python
matplotlib 多个图像共用一个colorbar的实现示例
Sep 10 Python
python3列表删除大量重复元素remove()方法的问题详解
Jan 04 Python
Pycharm 解决自动格式化冲突的设置操作
Jan 15 Python
Python用any()函数检查字符串中的字母以及如何使用all()函数
Apr 14 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开启gzip页面压缩实例代码
2010/03/11 PHP
PHP基础之运算符的使用方法
2013/04/28 PHP
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
JS代码格式化和语法着色V2
2006/10/14 Javascript
Javascript 学习笔记 错误处理
2009/07/30 Javascript
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
nullJavascript中创建对象的五种方法实例
2013/05/07 Javascript
js验证上传图片的方法
2015/05/12 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
python 限制函数调用次数的实例讲解
2018/04/21 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
容易被忽略的Python内置类型
2020/09/03 Python
Java和Javasciprt的区别
2012/09/02 面试题
业务主管岗位职责范本
2013/12/25 职场文书
幼儿园教师工作制度
2014/01/22 职场文书
网络技术专业求职信
2014/02/18 职场文书
精彩的演讲稿开头
2014/05/08 职场文书
竞选大队干部演讲稿
2014/09/11 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
出生证明范本
2015/06/15 职场文书
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS
新手初学Java List 接口
2021/07/07 Java/Android
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android
Spring boot admin 服务监控利器详解
2022/08/05 Java/Android