【发布时间】:2017-02-05 05:49:05
【问题描述】:
我正在编写一个脚本,它使用 imaplib 库从 IMAP 服务器请求一些数据。发起连接 (c) 后,我进行了以下调用:
rv, data = c.login(EMAIL_ACCOUNT, EMAIL_PASS)
if rv != 'OK':
print('login error')
else:
print(rv, data)
rv, mailboxes = c.list()
if rv != 'OK':
print('mailbox error')
else:
print(rv, data)
rv, data = c.select(EMAIL_FOLDER)
if rv != 'OK':
print('folder error')
else:
print(rv, data)
我如何重写它以使用某种包装函数来重用检查错误代码和打印数据的逻辑?我假设该函数会将错误消息作为参数以及要执行的命令(select、login 等)。如何通过在参数中传递名称来调用选择连接函数?
【问题讨论】:
-
不清楚你在问什么。是的,您可以编写一个包装函数 (
rv, data = handle_error(c.login(...))) 和/或将方法的名称传递给另一个函数。您尝试过什么,有什么问题? -
def check(rv, data, msg): ...并用作check(rv, data, 'folder error')? -
@jonrsharpe 基本上,我想将其简化为一个函数,它将操作(选择、列表、登录)作为参数以及错误消息。我可以将函数调用(例如
c.list())作为参数传递给“句柄”函数吗? -
可以,只要传递方法本身即可(
c.list,注意没有括号);它们是 Python 中的第一类。但是你需要正确处理参数。 -
你可能想看看 python 装饰器。