Найти - Пользователи
Полная версия: Область видимости переменных
Начало » Python для новичков » Область видимости переменных
1
asphix
Есть кусок кода:

    for line in p_data:
        try:
            (cod, prod, price, count, descr) = line.split(';')
        except:
            continue
        finally:
            # check if product code already have in db
            cursor.execute("select count(*) from t_products where product_code = {0}".format(cod))
   

в процессе работы в случае невозможности сплитнуть строку line, в секции finally возникает ошибка:

cursor.execute("select count(*) from t_products where product_code = {0}".format(cod))
UnboundLocalError: local variable 'cod' referenced before assignment

Вопрос: дело в сабже или я чего-то непонимаю?
FishHook
try:            
     assert True==False
     a=10
except:
     pass
finally:
     print a


Traceback (most recent call last):
File “uu.py”, line 10, in <module>
print a
NameError: name ‘a’ is not defined


Что, собственно, логично
asphix
да, пожалуй логичнее было бы сделать:

for line in p_data:
        try:
            (cod, prod, price, count, descr) = line.split(';')
            cursor.execute("select count(*) from t_products where product_code = {0}".format(cod))
        except:
            continue

Спасибо! Тему можно закрыть.
odnochlen
FishHook
Что, собственно, логично
А что логичного-то? Кто-то может обьяснить, как это работает?
PooH
odnochlen
FishHook
Что, собственно, логично
А что логичного-то? Кто-то может обьяснить, как это работает?
Блок finaly в try выполняется в любом случае, неважно было исключение или не было. В приведенном примере исключение бросается в строке
assert True==False
, так что до объявления переменной a дело не доходит. И в блоке finaly, при обращении к ней бросается новое исключение UnboundLocalError.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB