Поскольку, как вы сказали, статические поля не связаны с экземпляром.
Возможность доступа к статическим полям из ссылки экземпляра (как вы это делаете) является просто синтаксическим сахаром и не имеет дополнительных имея в виду. Ваш код компилируется в
main.getNull();
Main.value
Пожалуйста, добавьте пример данных к своему вопросу.
В вашем коде:
if retVal.empty:
dayEc = dayEc-1
checkExchangerate(yearEc,monthEc,dayEc,currCode)
else:
return min(retVal)
Если retVal пуст, он будет рекурсивно вызывать себя. Но когда он выходит из рекурсии, он ничего не делает с возвращаемым значением, поэтому он возвращает None.
Чтобы это исправить, вы должны return
значение, возвращаемое из рекурсии:
if retVal.empty:
dayEc = dayEc-1
return checkExchangerate(yearEc,monthEc,dayEc,currCode)
else:
return min(retVal)
Также вы можете заменить:
dayEc = dayEc-1
return checkExchangerate(yearEc,monthEc,dayEc,currCode)
на
[113 ]Однако вместо рекурсии я рекомендую использовать цикл:
def checkExchangerate(yearEc,monthEc,dayEc,currCode):
currCodes = {...}
retVal = False
while not retVal or retVal.empty:
retVal = exch_rate[currCodes[currCode]][exch_rate['DAGS']==dt(yearEc,monthEc,dayEc)]
dayEc -= 1
print(retVal)
return min(retVal)
Это может вызвать бесконечный цикл (так же, как ваш код может вызвать бесконечную рекурсию), поэтому вот версия с циклом for: [ 1117]
def checkExchangerate(yearEc,monthEc,dayEc,currCode):
currCodes = {...}
retVal = False
for day in range(dayEc, dayEc-20, -1):
retVal = exch_rate[currCodes[currCode]][exch_rate['DAGS']==dt(yearEc,monthEc,day)]
if not retVal.empty:
break;
print(retVal)
if retVal.empty:
return some_error_code
else:
return min(retVal)
Вы можете изменить 20
на другое число. Или используйте range(dayEc, 1, -1)
- как я подозреваю, этот день никогда не должен быть меньше 1