1. 程式人生 > 程式設計 >python 遞迴呼叫返回None的問題及解決方法

python 遞迴呼叫返回None的問題及解決方法

今天在做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,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_type))

區別在於遞迴呼叫的時候,要將函式本身一起返回。這樣就可以將最後的遞迴結果一點一點返回,可以解決返回的結果為None的問題。

總結

到此這篇關於python 遞迴呼叫返回None的問題及解決方法的文章就介紹到這了,更多相關python 遞迴返回None 內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!