如何在Python中从一个 except 块移动到另一个块?

问题描述 投票:0回答:1

我有一个可以执行一些 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”块中的代码复制粘贴到临时块中感觉“错误”,我想在之后将特定临时块中的异常抛出到更通用的块中它。这可能吗?

python exception try-catch
1个回答
0
投票

从 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),执行必要的整理/准备,然后重新引发捕获的异常。这样,异常将传播到临时错误块之后的更通用的块,并且您可以避免重复用于整理/准备的代码。

© www.soinside.com 2019 - 2024. All rights reserved.