Уведомления

Группа в Telegram: @pythonsu

#1 Март 8, 2019 14:56:57

SharkyEXE
Зарегистрирован: 2017-12-10
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает проверка, существует или нет переменная

Здравствуйте.

Пожалуйста, я очнеь прошу, помогите рабозраться, почему не работает проверка, существует или нет переменная

    try:
    config.plugins.NewYear.delay
   except NameError:
    #var_exists = False
    config.plugins.NewYear.delay.value_exists = False
    weather_city = 1123200
    open('/media/hdd/ClockToText_log.txt', 'a').write(str(weather_city)+'\n')
   else:
    #var_exists = True
    config.plugins.NewYear.delay.value_exists = True
    weather_city = config.plugins.NewYear.delay.value
    open('/media/hdd/ClockToText_log.txt', 'a').write(str(weather_city)+'\n')

Суть простая

Если существует переменная config.plugins.NewYear.delay , то выполняется
     #var_exists = True
    config.plugins.NewYear.delay.value_exists = True
    weather_city = config.plugins.NewYear.delay.value
    open('/media/hdd/ClockToText_log.txt', 'a').write(str(weather_city)+'\n')

Если не существует переменная config.plugins.NewYear.delay , то выполняется
     #var_exists = False
    config.plugins.NewYear.delay.value_exists = False
    weather_city = 1123200
    open('/media/hdd/ClockToText_log.txt', 'a').write(str(weather_city)+'\n')

Однако не работает

Почему не работает - файл /media/hdd/ClockToText_log.txt не создается , в файл /media/hdd/ClockToText_log.txt ничего не пишется

Спасибо.

Отредактировано SharkyEXE (Март 8, 2019 15:00:10)

Офлайн

#2 Март 8, 2019 15:30:00

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

Не работает проверка, существует или нет переменная

1) Есть специальная функция для проверки наличия атрибута объекта - hasattr
2) Не у всех объектов можно установить произвольный атрибут
3) При обращении к отсутствующему атрибуту райзится AttributeError, а никак не NameError
4) Вы как бы проверяете наличие атрибута delay, а установить пытаетесь delay.value_exists, ну и как это может быть?



Офлайн

#3 Март 8, 2019 15:33:50

SharkyEXE
Зарегистрирован: 2017-12-10
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает проверка, существует или нет переменная

FishHook

Здравствуйте.

Что такое config.plugins.NewYear.delay - это переменная , типа config.plugins.NewYear.delay = 1200

Что мне нужно - что если вообще существует , определена и прочее переменная config.plugins.NewYear.delay , то переменной weather_city присвоить значение переменной config.plugins.NewYear.delay , то есть weather_city = config.plugins.NewYear.delay

Иначе weather_city = 1200

Отредактировано SharkyEXE (Март 8, 2019 15:40:24)

Офлайн

#4 Март 8, 2019 15:41:25

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

Не работает проверка, существует или нет переменная

SharkyEXE
Я вам ответил развернуто, что конкретно вы не поняли? То что вы перехватываете NameError, вместо AttributeError? Это непонятно? Или непонятно то, что в питоне таким образом не проверяют наличие атрибута объекта? Я объяснил - есть hasattr специально для этого предназначенный. Может это непонятно? Или вам непонятно, что устанавливать атрибут несуществующего атрибута - это как-то странно?

   try:
       config.plugins.NewYear.delay  # проверяю, установлен ли delay 
   except NameError:
       config.plugins.NewYear.delay.value_exists = False  # ОК, он не существует, поэтому я ?????? Вот что вы тут делаете, объясните 



Офлайн

#5 Март 8, 2019 15:45:54

SharkyEXE
Зарегистрирован: 2017-12-10
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает проверка, существует или нет переменная

FishHook

Я же Вам написал , что config.plugins.NewYear.delay - это переменная, какие аттрибуты

Если есть у Вас желание - просто, пожалуйста, напишите

Если вообще существует , определена и прочее переменная config.plugins.NewYear.delay , то переменной weather_city присвоить значение переменной config.plugins.NewYear.delay , то есть weather_city = config.plugins.NewYear.delay

Иначе weather_city = 1200

Офлайн

#6 Март 8, 2019 15:55:08

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

Не работает проверка, существует или нет переменная

SharkyEXE
Я же Вам написал , что config.plugins.NewYear.delay - это переменная, какие аттрибуты

ГОСТ Р 43.0.5-2009: Информационное обеспечение техники и операторской деятельности. Процессы информационно-обменные в технической деятельности. Общие положения

3.1 атрибут объекта: Элемент данных, представляющий определенную характеристику объекта (информационного, информационно-интеллектуального, предметного) и имеющий имя и значение.

Если вы хотите поспорить со мной о терминах, я вас переспорю.
Крепко подумайте над тем, что вам уже сказано.



Офлайн

#7 Март 8, 2019 15:57:13

SharkyEXE
Зарегистрирован: 2017-12-10
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает проверка, существует или нет переменная

Все, спасибо, извините, буду ждать ответа других пользователей, при их желании помочь.

FishHook
я вас переспорю.
Мне просто тупо решение моей проблемы, и ничего более

Отредактировано SharkyEXE (Март 8, 2019 15:57:58)

Офлайн

#8 Март 8, 2019 16:08:41

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

Не работает проверка, существует или нет переменная

SharkyEXE
Мне просто тупо решение моей проблемы, и ничего более
Отлично, это даже уже интересно становится. Давайте по порядку,
Вот смотрите, код выдает ошибку
 Python 3.7.2 (default, Jan 10 2019, 23:51:51) 
[GCC 8.2.1 20181127] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = object()
>>> a.a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'a'
>>> 
Как вы наверняка видите, ошибка, которая возникает при обращении к неустановленной км.. переменной - AttributeError.
Вы в своем коде перехватываете NameError. Это, конечно, не сработает.

Ответьте, вот что вам тут непонятно? Какой конкретно пункт, слово, выражение, я его вам разжую на атомы. Вы только скажите, чего вы не понимаете.



Офлайн

#9 Март 8, 2019 23:22:36

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Не работает проверка, существует или нет переменная

Привет!
Вам же написали, что вы пытаетесь перехватить NameError в то время когда система выдаёт ошибку AttributeError.

Поэтому вместо
except NameError:
напишите
except AttributeError:

в этом случае программа будет обрабатывать именно тот тип ошибки который вам нужен

Офлайн

#10 Март 11, 2019 13:10:50

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Не работает проверка, существует или нет переменная

NameError выкидывает когда обращаемся к именам которые которые пишутся без точки. Для конструкций вида х.у - это уже обращение к атрибуту и ошибка здесь будет AttributeError. Надеюсь, понятно выразился, хотя и не 100% точно с точки зрения терминологии.
Вот это пытается втолковать FishHook несколько постов подряд, а panama555 конкретно указал Вашу ошибку.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version