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多线程用法实例详解
Jan 15 Python
python基础教程之Filter使用方法
Jan 17 Python
python 全局变量的import机制介绍
Sep 07 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
python批量修改图片大小的方法
Jul 24 Python
python面试题小结附答案实例代码
Apr 11 Python
django之状态保持-使用redis存储session的例子
Jul 28 Python
Python标准库shutil模块使用方法解析
Mar 10 Python
python 负数取模运算实例
Jun 03 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
Jul 03 Python
关于Python错误重试方法总结
Jan 03 Python
Django项目在pycharm新建的步骤方法
Mar 02 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 项目的方法
2007/01/02 PHP
php对gzip文件或者字符串解压实例参考
2008/07/25 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
PHP7.0安装笔记整理
2015/08/28 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
CI框架网页缓存简单用法分析
2018/12/26 PHP
DOM下的节点属性和操作小结
2009/05/14 Javascript
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
JS 实现点击a标签的时候让其背景更换
2013/10/15 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
Python回调函数用法实例详解
2015/07/02 Python
玩转python爬虫之URLError异常处理
2016/02/17 Python
linux环境中没有网络怎么下载python
2019/07/07 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
TensorFlow获取加载模型中的全部张量名称代码
2020/02/11 Python
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
SQL SERVER面试资料
2013/03/30 面试题
注塑工厂厂长岗位职责
2013/12/02 职场文书
行政专员工作职责
2013/12/22 职场文书
护士年终考核评语
2014/12/31 职场文书
七年级作文之下雨天
2019/12/23 职场文书
react中的DOM操作实现
2021/06/30 Javascript
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL