Уведомления

Группа в Telegram: @pythonsu

#1 Июль 4, 2012 13:50:21

asphix
Зарегистрирован: 2012-05-17
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Область видимости переменных

Есть кусок кода:

    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

Вопрос: дело в сабже или я чего-то непонимаю?

Офлайн

#2 Июль 4, 2012 14:04:55

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Область видимости переменных

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


Что, собственно, логично



Офлайн

#3 Июль 4, 2012 14:37:37

asphix
Зарегистрирован: 2012-05-17
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Область видимости переменных

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

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

Спасибо! Тему можно закрыть.

Отредактировано asphix (Июль 4, 2012 14:56:40)

Офлайн

#4 Июль 4, 2012 19:03:04

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Область видимости переменных

FishHook
Что, собственно, логично
А что логичного-то? Кто-то может обьяснить, как это работает?

Офлайн

#5 Июль 5, 2012 05:57:23

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Область видимости переменных

odnochlen
FishHook
Что, собственно, логично
А что логичного-то? Кто-то может обьяснить, как это работает?
Блок finaly в try выполняется в любом случае, неважно было исключение или не было. В приведенном примере исключение бросается в строке
assert True==False
, так что до объявления переменной a дело не доходит. И в блоке finaly, при обращении к ней бросается новое исключение UnboundLocalError.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version