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实现简单的代理服务器
Jul 25 Python
Django在win10下的安装并创建工程
Nov 20 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
Jan 16 Python
python 去除二维数组/二维列表中的重复行方法
Jan 23 Python
python图形工具turtle绘制国际象棋棋盘
May 23 Python
Python 堆叠柱状图绘制方法
Jul 29 Python
关于python3中setup.py小概念解析
Aug 22 Python
Python如何计算语句执行时间
Nov 22 Python
Python timer定时器两种常用方法解析
Jan 20 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 Python
Python 使用生成器代替线程的方法
Aug 04 Python
python dir函数快速掌握用法技巧
Dec 09 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
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
php实现Mysql简易操作类
2015/10/11 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
Jquery判断$(&quot;#id&quot;)获取的对象是否存在的方法
2013/09/25 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
2015/09/06 Javascript
JavaScript实现的经典文件树菜单效果
2015/09/08 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
Python爬虫模拟登录带验证码网站
2016/01/22 Python
利用python微信库itchat实现微信自动回复功能
2017/05/18 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
Python实现识别手写数字大纲
2018/01/29 Python
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
Linux下远程连接Jupyter+pyspark部署教程
2019/06/21 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
Python读取YAML文件过程详解
2019/12/30 Python
Python Pandas list列表数据列拆分成多行的方法实现
2020/12/14 Python
大学生找工作求职信
2014/07/09 职场文书
一般纳税人申请报告
2015/05/18 职场文书
奠基仪式致辞
2015/07/30 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL
MySQL添加索引特点及优化问题
2022/07/23 MySQL