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 json encode datetime类型
Dec 28 Python
python采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
用Python实现通过哈希算法检测图片重复的教程
Apr 02 Python
在Python程序中进行文件读取和写入操作的教程
Apr 28 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
对python中的six.moves模块的下载函数urlretrieve详解
Dec 19 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 Python
python读写csv文件的方法
Aug 13 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 Python
pygame实现飞机大战
Mar 11 Python
jupyter 实现notebook中显示完整的行和列
Apr 09 Python
Python爬虫如何破解JS加密的Cookie
Nov 19 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用户指南-cookies部分
2006/10/09 PHP
PHP的面试题集
2006/11/19 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
php app支付宝回调(异步通知)详解
2018/07/25 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
javascript 学习笔记(一)DOM基本操作
2011/04/08 Javascript
js查错流程归纳
2012/05/04 Javascript
jquery和ajax的关系详细介绍
2013/11/29 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
Python判断变量是否已经定义的方法
2014/08/18 Python
Python的Django框架使用入门指引
2015/04/15 Python
Python字符串格式化
2015/06/15 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
Python实现求数列和的方法示例
2018/01/12 Python
python画图--输出指定像素点的颜色值方法
2019/07/03 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
2020/06/09 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
利用Python优雅的登录校园网
2020/10/21 Python
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
达拉斯牛仔官方商店:Dallas Cowboys Pro Shop
2018/02/10 全球购物
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
MYSQL支持事务吗
2013/08/09 面试题
中学实习教师自我鉴定
2013/12/12 职场文书
实习自我鉴定
2013/12/15 职场文书
yy结婚证婚词
2014/01/10 职场文书
委托书英文
2015/01/28 职场文书
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android