我遍历了一系列货币,以便从API下载价格序列,并且碰巧其中的某些货币不受支持,因此它引发了模块定义的异常类:ExchangeError: This currency pair is not supported
。
发生这种情况时,我想继续循环到下一个货币,但是由于某种原因,我无法处理模块异常。
这是一个带有内置异常的示例:
f = [1,2,3,4,'A',5]
def foo(nb):
return nb /2
for i in f :
try:
print(foo(i))
except TypeError :
continue
按预期返回:
0.5
1
1.5
2
2.5
但是一旦它是一个模块(或用户定义的)异常,它就会抛出一个错误,指出该异常未定义:
@retry(wait_exponential_multiplier=1000, wait_exponential_max=10000)
def apiFetchOHLC(obj, currency, timeframe, option):
ohlcv = obj().fetch_ohlcv(currency, timeframe, since = option)
return ohlc
for c in currencies_list :
...
try :
# Download data
ohlc = apiFetchOHLC(obj, c, tf, maxCandlesLimit)
# except : # works fine
except ExchangeError : # doesn't work
print("Oops! That was no valid currency. Continue...")
continue
这是我运行循环时遇到的错误:
except ExchangeError:
NameError: name 'ExchangeError' is not defined
要使其正常工作,我需要删除异常类型ExchangeError
,但对我来说,这不是一种解决方法,因为无论异常是什么,它都会继续循环,有时我需要重试下载。
如何使用try
和except
或retrying
软件包来实现? (link)
答案 0 :(得分:0)
def foo(count):
try:
while(count < 10):
if(count%2 == 1):
raise Exception()
print(count)
count = count+1
except:
print( str(count) + ' -> Exception')
foo(count+1)
foo(2)
每当try块中发生异常时,请按以下方式在except块中进行处理-
try
块中执行此过程,请从try
块到达except
块-将try
块放在{{1 }},将其命名为function
,以便您可以从foo
块中调用它答案 1 :(得分:0)
更好地识别问题之后,我发现我需要提供要捕获的异常类的完整名称空间:
for c in currencies_list :
...
try :
# Download data
ohlc = apiFetchOHLC(obj, c, tf, maxCandlesLimit)
except ccxt.ExchangeError :
print("Oops! That was no valid currency. Continue...")
continue