Minio minio.error.SignatureDoesNotMatch 抛出 try-except

Minio minio.error.SignatureDoesNotMatch thrown with try-except

我正在为 minio 服务器使用 python 包。我有以下用于登录的代码:

from minio.error import [...], SignatureDoesNotMatch, [...]

def login(self):
    try: 
        self.user = Minio(MINIO_CONFIG['MINIO_ENDPOINT'], 
                                access_key=self.username, 
                                secret_key=self.password, 
                                secure=MINIO_CONFIG['MINIO_SECURE'])
        return {"msg":"User is now logged in", "status": "OK"}
     except SignatureDoesNotMatch as err: 
        return {"msg": err.message, "status":"F"}
     except ResponseError as err: 
        return {'msg': err.message, 'status': "F"}
     except InvalidAccessKeyId as err: 
        return {"msg": err.message, "status":"F"}
     except InvalidArgument as err: 
        return {"msg": err.message, "status":"F"}
     except InvalidArgumentError as err: 
        return {"msg": err.message, "status":"F"}

我面临的问题是,即使我在 try-except SignatureDoesNotMatch 中有 SignatureDoesNotMatch 以防凭据不正确,它也不会 return 我的消息应该,但它会抛出一个 minio.error.SignatureDoesNotMatch 。为什么会这样?

我得到的错误:

minio.error.SignatureDoesNotMatch: SignatureDoesNotMatch: message: The request signature we calculated does not match the signature you provided.

这看起来不错,查看代码,无论提供的凭据如何,它都不会 运行 自己出错。当它进行 API 调用时,或者当您使用此 self.user 实例调用 list_bucketslist_objects 等方法时,它只会 运行 出错,来自在这个街区之外。

我想你想做的是——从这个封装之外调用 list_buckets 等方法——在代码的这一部分之外的其他地方,然后它们产生这个错误并传播它们到控制台。您不能将 MinIO 实例封装在 try-catch 中,并在您从 try-catch 块外部使用 self.user.list_buckets() 之类的东西时捕获错误。