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使用ctypes模块调用windowsapi获取系统版本示例
Apr 17 Python
浅谈python中的实例方法、类方法和静态方法
Feb 17 Python
python非递归全排列实现方法
Apr 10 Python
搞清楚 Python traceback的具体使用方法
May 13 Python
Python制作微信好友背景墙教程(附完整代码)
Jul 17 Python
ipad上运行python的方法步骤
Oct 12 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
Dec 31 Python
Django自定义列表 models字段显示方式
Apr 03 Python
Keras之fit_generator与train_on_batch用法
Jun 17 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 Python
用 Django 开发一个 Python Web API的方法步骤
Dec 03 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表单转换textarea换行符的方法
2010/09/10 PHP
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
PHP检测移动设备类mobile detection使用实例
2014/04/14 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
php中socket通信机制实例详解
2015/01/03 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
javascript进行数组追加方法小结
2014/06/16 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
Webpack的dll功能使用
2018/06/28 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
2018/09/19 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
python逐行读取文件内容的三种方法
2014/01/20 Python
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
python 解决selenium 中的 .clear()方法失效问题
2020/09/01 Python
计算机毕业大学生推荐信
2013/12/01 职场文书
转预备党员政审材料
2014/02/06 职场文书
篮球比赛口号
2014/06/10 职场文书
公共场所禁烟标语
2014/06/25 职场文书
就业协议书样本
2014/08/20 职场文书
大学生见习报告总结
2014/11/04 职场文书
导游词格式
2015/02/13 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android