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制作检测Linux运行信息的工具的教程
Apr 01 Python
Python闭包实现计数器的方法
May 05 Python
举例讲解Python中的迭代器、生成器与列表解析用法
Mar 20 Python
Centos 升级到python3后pip 无法使用的解决方法
Jun 12 Python
python保存网页图片到本地的方法
Jul 24 Python
Python动态赋值的陷阱知识点总结
Mar 17 Python
Python3.5模块的定义、导入、优化操作图文详解
Apr 27 Python
python打造爬虫代理池过程解析
Aug 15 Python
python模拟键盘输入 切换键盘布局过程解析
Aug 15 Python
python+opencv实现车牌定位功能(实例代码)
Dec 24 Python
python 的topk算法实例
Apr 02 Python
python归并排序算法过程实例讲解
Nov 04 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中explode与split的区别介绍
2012/10/03 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
CodeIgniter配置之autoload.php自动加载用法分析
2016/01/20 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
JQuery 弹出框定位实现方法
2010/12/02 Javascript
js内存泄露的几种情况详细探讨
2013/05/31 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
原生JS查找元素的方法(推荐)
2016/11/22 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
基于vue中解决v-for使用报红并出现警告的问题
2018/03/03 Javascript
JavaScript控制浏览器全屏显示简单示例
2018/07/05 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
2021/02/10 Javascript
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
2013年高中生自我评价
2013/10/23 职场文书
股份合作协议书
2014/04/12 职场文书
房产公证委托书范本
2014/09/20 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
python flappy bird小游戏分步实现流程
2022/02/15 Python