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使用in操作符时元组和数组的区别分析
May 19 Python
详解Python网络爬虫功能的基本写法
Jan 28 Python
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 Python
详解Golang 与python中的字符串反转
Jul 21 Python
python实现TF-IDF算法解析
Jan 02 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
python 文件查找及内容匹配方法
Oct 25 Python
超简单的Python HTTP服务
Jul 22 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 Python
Python 读取 YUV(NV12) 视频文件实例
Dec 09 Python
python实现修改固定模式的字符串内容操作示例
Dec 30 Python
Python基于pyjnius库实现访问java类
Jul 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入门
2006/10/09 PHP
PHP下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
php错误级别的设置方法
2013/06/17 PHP
Zend Framework入门教程之Zend_View组件用法示例
2016/12/09 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
js去除重复字符串两种实现方法
2013/01/09 Javascript
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
js中自定义react数据验证组件实例详解
2018/10/19 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
使用post方法实现json往返传输数据的方法
2019/03/30 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
python控制台英汉汉英电子词典
2020/04/23 Python
Python中import机制详解
2017/11/14 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
python实现AES加密与解密
2019/03/28 Python
django中cookiecutter的使用教程
2020/12/03 Python
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
给儿子的表扬信
2014/01/15 职场文书
开业庆典答谢词
2014/01/18 职场文书
中文专业求职信
2014/06/20 职场文书
公司租车协议书
2015/01/29 职场文书
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python