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中的面向对象编程详解(下)
Apr 13 Python
python处理大数字的方法
May 27 Python
python字典键值对的添加和遍历方法
Sep 11 Python
怎么使用pipenv管理你的python项目
Mar 12 Python
浅析python3中的os.path.dirname(__file__)的使用
Aug 30 Python
Python爬虫设置代理IP(图文)
Dec 23 Python
深入理解Django-Signals信号量
Feb 19 Python
解决Django连接db遇到的问题
Aug 29 Python
Python values()与itervalues()的用法详解
Nov 27 Python
Python偏函数实现原理及应用
Nov 20 Python
python实现自动化群控的步骤
Apr 11 Python
2021年最新用于图像处理的Python库总结
Jun 15 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中通过ADO调用Access数据库的方法测试不通过
2006/12/31 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
小议Javascript中的this指针
2010/03/18 Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
2011/05/09 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
解决vue 引入子组件报错的问题
2018/09/06 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
python实现对一个完整url进行分割的方法
2015/04/29 Python
python更新列表的方法
2015/07/28 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
Python中顺序表的实现简单代码分享
2018/01/09 Python
浅谈python之新式类
2018/08/12 Python
Python3离线安装Requests模块问题
2019/10/13 Python
Python 导入文件过程图解
2019/10/15 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
后进生转化工作制度
2014/01/17 职场文书
通信生自我鉴定
2014/01/18 职场文书
家庭教育先进个人事迹材料
2014/01/24 职场文书
校园安全广播稿
2014/02/08 职场文书
2014年效能监察工作总结
2014/11/21 职场文书
校园广播稿范文
2015/08/19 职场文书