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中的类与对象之描述符详解
Mar 27 Python
Python线程的两种编程方式
Apr 14 Python
Python 文件管理实例详解
Nov 10 Python
python3安装pip3(install pip3 for python 3.x)
Apr 03 Python
Python简单计算文件MD5值的方法示例
Apr 11 Python
python获取代理IP的实例分享
May 07 Python
linux下python使用sendmail发送邮件
May 22 Python
搞定这套Python爬虫面试题(面试会so easy)
Apr 03 Python
Python3基础教程之递归函数简单示例
Jun 07 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
Python八皇后问题解答过程详解
Jul 29 Python
通过实例解析python描述符原理作用
Jan 22 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
15种PHP Encoder的比较
2007/03/06 PHP
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
8个超棒的学习 jQuery 的网站 推荐收藏
2011/04/02 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
详解在Vue中有条件地使用CSS类
2017/09/30 Javascript
谈谈JS中的!!
2017/12/07 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
python实现自动登录后台管理系统
2018/10/18 Python
django2.0扩展用户字段示例
2019/02/13 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
python函数超时自动退出的实操方法
2020/12/28 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
css sprite简单实例
2016/05/23 HTML / CSS
详解CSS3浏览器兼容
2016/12/14 HTML / CSS
环境科学专业个人求职信
2013/12/15 职场文书
给民警的表扬信
2014/01/08 职场文书
十八届三中全会感言
2014/03/10 职场文书
个人承诺书格式
2014/06/03 职场文书
2014最新毕业证代领委托书
2014/09/26 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
2014年反腐倡廉工作总结
2014/12/05 职场文书
家长学校教学计划
2015/01/19 职场文书
论文答谢词
2015/01/20 职场文书
趣味运动会标语口号
2015/12/26 职场文书
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle
MySQL索引失效场景及解决方案
2022/07/23 MySQL