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 24 Python
python让图片按照exif信息里的创建时间进行排序的方法
Mar 16 Python
整理Python最基本的操作字典的方法
Apr 24 Python
查看Python安装路径以及安装包路径小技巧
Apr 28 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
Python3使用正则表达式爬取内涵段子示例
Apr 22 Python
python基于itchat模块实现微信防撤回
Apr 29 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
Python通过正则库爬取淘宝商品信息代码实例
Mar 02 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
运行Python编写的程序方法实例
Oct 21 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
function.inc.php超越php
2006/12/09 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
dojo 之基础篇(三)之向服务器发送数据
2007/03/24 Javascript
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
js模拟淘宝网的多级选择菜单实现方法
2015/08/18 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
jQuery实现的兼容性浮动层示例
2016/08/02 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
2017/02/21 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
详解js常用分割取字符串的方法
2019/05/15 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
Python中list查询及所需时间计算操作示例
2018/06/21 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
百度吧主申请感言
2014/01/12 职场文书
西北政法大学自主招生自荐信
2014/01/29 职场文书
关于廉洁的广播稿
2014/01/30 职场文书
布达拉宫的导游词
2015/02/02 职场文书
python如何为list实现find方法
2022/05/30 Python