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 相关文章推荐
linux平台使用Python制作BT种子并获取BT种子信息的方法
Jan 20 Python
python自动裁剪图像代码分享
Nov 25 Python
Django 实现购物车功能的示例代码
Oct 08 Python
mac PyCharm添加Python解释器及添加package路径的方法
Oct 29 Python
Python高斯消除矩阵
Jan 02 Python
Django 响应数据response的返回源码详解
Aug 06 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
Feb 10 Python
如何通过命令行进入python
Jul 06 Python
Python实现迪杰斯特拉算法过程解析
Sep 18 Python
python中spy++的使用超详细教程
Jan 29 Python
Django中template for如何使用方法
Jan 31 Python
python tkinter实现下载进度条及抖音视频去水印原理
Feb 07 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+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
WordPress中的shortcode短代码功能使用详解
2016/05/17 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
php框架知识点的整理和补充
2021/03/01 PHP
基于jquery的商品展示放大镜
2010/08/07 Javascript
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
提高jQuery性能的十个诀窍
2013/11/14 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
如何实现移动端浏览器不显示 pc 端的广告
2015/10/15 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
Nodejs中解决cluster模块的多进程如何共享数据问题
2016/11/10 NodeJs
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
vue cli4下环境变量和模式示例详解
2020/04/09 Javascript
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
函授本科毕业自我鉴定
2013/10/09 职场文书
法学专业毕业生自荐信范文
2013/12/18 职场文书
寄语学生的话
2014/04/10 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
感恩之星事迹材料
2014/05/03 职场文书
县人大领导班子四风对照检查材料思想汇报
2014/10/09 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书