我试图在忽略异常时执行循环。我认为pass
或continue
将允许我忽略循环中的异常。我应该在哪里放置pass
或continue
?
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
答案 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
例外情况。 (KucoinAPIException
,KucoinResolutionException
和KucoinRequestException
。在这种情况下,您的循环应如下所示:
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:
行提及个别例外情况。