中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python 遞歸調用返回None的問題及解決方法

發布時間:2020-09-24 13:13:05 來源:腳本之家 閱讀:141 作者:Clannad_niu 欄目:開發技術

今天在做python獲取郵件時需要遞歸調用解析函數才可以解析郵件內容,最后想要將解析出的內容返回時發現返回的是None 可以內容卻可以打印出來,很費解。后來在網上找到了解決方案,才想明白 在這里記錄下。

原文:https://www.jb51.net/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 內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青田县| 九寨沟县| 日土县| 梅州市| 南溪县| 监利县| 庄河市| 江孜县| 兴和县| 武汉市| 长宁县| 肃北| 通化县| 玉林市| 拜城县| 平泉县| 赤水市| 云安县| 东兰县| 万州区| 峨眉山市| 娄底市| 大冶市| 沂水县| 长宁区| 吉林省| 印江| 马关县| 莱西市| 嵊泗县| 临泽县| 平果县| 昌平区| 京山县| 永年县| 新泰市| 台中市| 赣榆县| 云浮市| 鄯善县| 印江|