您好,登錄后才能下訂單哦!
今天在做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 內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。