python 遞迴呼叫返回None 解決方案

2021-10-03 18:22:20 字數 2440 閱讀 2585

今天在做python獲取郵件時需要遞迴呼叫解析函式才可以解析郵件內容,最後想要將解析出的內容返回時發現返回的是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))

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可以內容卻可以列印出來,很費解。後來在網上找到了解決方案,才想明白 在這裡記錄下。原文 程式設計客棧 原始測試 如下 def print info msg,indent 0 if i...

遞迴呼叫的返回值

在這之前我不少用遞迴函式,但一直沒有真正弄明白遞迴函式的返回值的原理,為了更好的說明問題我寫乙個平衡二叉樹演算法利用遞迴演算法查詢值的原始碼如下 package com.cph.interviwe public class node public node public boolean store ...

Python 函式遞迴呼叫

案例一 漢諾塔 例一 def move n,a,buffer,c if n 1 print move a,c else move n 1,a,c,buffer move 1,a,buffer,c move n 1,buffer,a,c move 3,a b c 例二 def hanoi n,x,y,...