Вот моя проблема:
У меня точно такой же код (скопированный), который я запускаю локально в коде Visual Studio, а также в Databricks. По какой-то причине это работает на коде Visual Studio, но не на Databricks. Вот ошибка, которую я получаю в Databricks:
local variable 'ret' referenced before assignment
Ошибка указывает на -> print(ret)
(см. Ниже). Не должно быть никаких проблем с областью действия, поскольку мой print ret
находится вне моего оператора if then else
.
Я пытался поиграть с разными отступами, но ничего не работает. У кого-нибудь есть ключ? (ps: у меня нет доступа к Python версиям на БД, так как это не моя личная учетная запись, поэтому я прошу решение, чтобы справиться с текущей средой, которая у меня есть)
Вот выдержка кода, который работает на коде Visual Studio, но не на Databricks. В нем много кода, но я просто хочу проверить с вами общую структуру . Я создал упрощенную модель ниже.
for FX_ext in ['', 'full_FX_', 'USD_FX_']:
for bt_type, field in trafo_dict.items():
MPs = val[field].values
MPs_null = MPs.copy()
MPs_null[0] = np.nan
for period in ['1d', 'Nd']:
#print(MPs_null[shifts[period]]) #########
if FX_ext == '':
try:
ret = MPs_null[shifts[period]] / MPs[:-1]
except:
print()
pass
elif FX_ext == 'USD_FX_':
usd = sp_list['FX_rates_USD']
ret = np.array(MPs_null[shifts[period]]).astype(float) * np.array(usd[shifts[period]]).astype(float) / \
np.array(np.array(MPs[:-1]).astype(float)*np.array(usd[:-1])).astype(float) ## Hallelujah :D
else:
c= dict()
retlst = []
for curr in ['USD', 'EUR', 'GBP']:
c = sp_list[f'FX_rates_{curr}']
retlst.append(
np.array(MPs_null[shifts[period]]).astype(float) * np.array(c[shifts[period]]).astype(float) / \
np.array((np.array(MPs[:-1]).astype(float)*np.array(c[:-1]).astype(float))) )# Jesus christ finally succeded to resolve this issue
ret = functools.reduce(np.minimum, retlst)
print(ret)
Целое является частью большой функции и одинаково происходит, когда я запускаю его как целую систему.
Я пытался протестировать аналогичную и упрощенную структуру на Databricks , чтобы проверить, не было ли ничего принципиально неправильного в моих Databricks и Python версиях, и это сработало (без проблем):
a = 5
for period in [1, 3]:
if a ==5:
b = a + period
elif a >5:
b = 48
else:
b=0
print(b)
Output:
6
8
Спасибо за вашу помощь