gpt4 book ai didi

python - 在 Python 中包装单个函数调用

转载 作者:行者123 更新时间:2023-11-30 22:49:32 25 4
gpt4 key购买 nike

我正在编写一个脚本,该脚本使用 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)

我如何重写它以使用某种包装函数来重用检查错误代码和打印数据的逻辑?我假设该函数将接受错误消息作为参数以及要执行的命令(selectlogin 等)。如何通过在参数中传递名称来调用选择连接函数?

最佳答案

据我了解,您想检查装饰器以完成您的任务。

class Wrapper:
def __init__(self, error_message):
self.error_message = error_message

def __call__(self, wrapped):
def func(*args, **kwargs):
rv, data = wrapped(*args, **kwargs)
if rv=="OK":
return(rv, data)
else:
print(self.error_message)
return(rv, data)
return func

@Wrapper("Folder Error")
def select(email_folder):
return "OK", "OLOLO"

@Wrapper("Folder Error")
def select_err(email_folder):
return "FAIL", "OLOLO"

print select("")
print select_err("")

产量

('OK', 'OLOLO')
Folder Error
('FAIL', 'OLOLO')

您可以检查 Wrapper 的 __call__ 函数内的回复并按照您想要的方式处理它。例如,如果 rv 不等于“OK”

,您可以返回“False”或引发错误

但是对于您的情况来说可能过于复杂。

关于python - 在 Python 中包装单个函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39727321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com