如何在循环时忽略异常?

时间:2018-03-14 18:14:48

标签: python loops exception

我试图在忽略异常时执行循环。我认为passcontinue将允许我忽略循环中的异常。我应该在哪里放置passcontinue

class KucoinAPIException(Exception):
    """Exception class to handle general API Exceptions
        `code` values
        `message` format
    """
    def __init__(self, response):
        self.code = ''
        self.message = 'Unknown Error'
        try:
            json_res = response.json()
        except ValueError:
            self.message = response.content
            pass            
        else:
            if 'error' in json_res:
                self.message = json_res['error']
            if 'msg' in json_res:
                self.message = json_res['msg']
            if 'message' in json_res and json_res['message'] != 'No message available':
                self.message += ' - {}'.format(json_res['message'])
            if 'code' in json_res:
                self.code = json_res['code']
            if 'data' in json_res:
                try:
                    self.message += " " + json.dumps(json_res['data'])
                except ValueError:
                    pass

        self.status_code = response.status_code
        self.response = response
        self.request = getattr(response, 'request', None)

    def __str__(self):
        return 'KucoinAPIException {}: {}'.format(self.code, self.message)

这不起作用:

from kucoin.exceptions import KucoinAPIException, KucoinRequestException, KucoinResolutionException

for i in range(10):
    # Do kucoin stuff, which might raise an exception.
    continue

4 个答案:

答案 0 :(得分:1)

快速解决方案:

在循环中捕捉例外

for i in range(10):
    try:
        # Do kucoin stuff, which might raise an exception.
    except Exception as e:
        print(e)
        pass

采用最佳做法:

请注意,捕获从Exception继承的所有异常通常被认为是不好的做法。相反,确定可能引发的异常并处理这些异常。在这种情况下,您可能希望处理Kucoin例外情况。 (KucoinAPIExceptionKucoinResolutionExceptionKucoinRequestException。在这种情况下,您的循环应如下所示:

for i in range(10):
    try:
        # Do kucoin stuff, which might raise an exception.
    except (KucoinAPIException, KucoinRequestException, KucoinResolutionException) as e:
        print(e)
        pass

通过重构自定义异常层次结构以从自定义异常类继承,我们可以使except子句更简洁。说,KucoinException

class KucoinException(Exception):
    pass

class KucoinAPIException(KucoinException):
    # ...

class KucoinRequestException(KucoinException):
    # ...

class KucoinResolutionException(KucoinException):
    # ...

然后你的循环看起来像这样:

for i in range(10):
try:
    # Do kucoin stuff, which might raise an exception.
except KucoinException as e:
    print(e)
    pass

答案 1 :(得分:1)

Exception个类不适用于处理异常。他们实际上不应该有任何逻辑。异常类本质上与enums类似,可以让我们快速轻松地区分不同的类型异常。

您必须提出或忽略异常的逻辑应该在您的主代码流中,而不是在异常本身中。

答案 2 :(得分:0)

无论如何,您都可以使用finally块来执行块。

for i in range(10):
    try:
        #do something
    except:
        #catch exceptions
    finally:
        #do something no matter what

这是你在找什么?

答案 3 :(得分:-2)

使用try除了抛出KucoinAPIException的主块之外

for i in range(10):
    try:
    # do kucoin stuff
    # .
    # .
    # .
    except:
        pass

由于您提到忽略异常,我假设您将传递所有异常。因此,无需在except:行提及个别例外情况。