我有一个可以执行一些 FTP 操作的函数:
def ftpFunc(host, user, passwd, retries=0):
try:
ftp = FTP(host, user, passwd)
... do ftp things ...
return False, good_stuff
except ftplib.error_temp as tmp:
if retries >= 2:
... do some tidying/prep error_info ...
return True, error_info
return ftpFunc(host, user, passwd, retries=retries+1)
except ftplib.all_errors as e:
... do some tidying/prep error_info ...
return True, error_info
预计 FTP 内容偶尔会根据服务器响应引发永久错误或临时错误,在发生永久(或任何其他)错误的情况下,该函数会返回一些错误值供程序处理,但如果出现临时错误,该函数将递归重试。但是,我不希望该函数永远递归,因此我检查退出次数,如果太多,则返回与永久错误块中相同的值。
我不介意这种方式,但将“all_errors”块中的代码复制粘贴到临时块中感觉“错误”,我想在之后将特定临时块中的异常抛出到更通用的块中它。这可能吗?
从 ftplib 导入 FTP、error_temp、all_errors
def ftpFunc(主机、用户、密码、重试=0): 尝试: ftp = FTP(主机、用户、密码)
return False, "good_stuff"
except error_temp as tmp:
if retries >= 2:
raise # Re-raise the captured exception
error_info = "Temporary error"
raise tmp
except all_errors as e:
return True, "error_info"
当发生临时错误时,它捕获异常(tmp),执行必要的整理/准备,然后重新引发捕获的异常。这样,异常将传播到临时错误块之后的更通用的块,并且您可以避免重复用于整理/准备的代码。