Size: a a a

2021 January 23

DS

David Shiko in SPb Python
Всем првиет. Скажите пожалуйста почему результат работы кода разный?

def error_handler(error):
   print(error in config.fastapi_http_errors.values())

def foo()
   try:
       1/0
   except Exception as error:
       error_handler(error)
       print(error in config.fastapi_http_errors.values())

>>> False
>>> True
источник

EK

Evgeniy Kolbin in SPb Python
David Shiko
Всем првиет. Скажите пожалуйста почему результат работы кода разный?

def error_handler(error):
   print(error in config.fastapi_http_errors.values())

def foo()
   try:
       1/0
   except Exception as error:
       error_handler(error)
       print(error in config.fastapi_http_errors.values())

>>> False
>>> True
Я не знаком с fastapi, но ты можешь пояснить логику где ты в функции  error_handler принимаешь аргумент error и его никак не используешь?
источник

DS

David Shiko in SPb Python
Evgeniy Kolbin
Я не знаком с fastapi, но ты можешь пояснить логику где ты в функции  error_handler принимаешь аргумент error и его никак не используешь?
В оригинале она должа райзиться если есть в этих ошибках, иначе райзится стандарнтая 503 ошибка
источник

EK

Evgeniy Kolbin in SPb Python
Думаю тебе надо почитать про область видимость переменных. Error в твоей функции и в принте это разные сущности. Думаю что функция config.fastapi_http_errors выдаёт разные значения, копай в эту сторону.
источник

DS

David Shiko in SPb Python
Evgeniy Kolbin
Думаю тебе надо почитать про область видимость переменных. Error в твоей функции и в принте это разные сущности. Думаю что функция config.fastapi_http_errors выдаёт разные значения, копай в эту сторону.
Почему же это разные сущности, если error_handler принимает error (сущность) как параметр? Это та же самая сущность с тем же id
источник

EK

Evgeniy Kolbin in SPb Python
David Shiko
Почему же это разные сущности, если error_handler принимает error (сущность) как параметр? Это та же самая сущность с тем же id
Ты в этой функции принимаешь аргумент error и никак не используешь ее. Твой error в принте это другая сущность.
источник

EK

Evgeniy Kolbin in SPb Python
С тем же успехом ты можешь заменить error в твоём принте внутри функции на x in config.fastapi...
источник

DS

David Shiko in SPb Python
Evgeniy Kolbin
Ты в этой функции принимаешь аргумент error и никак не используешь ее. Твой error в принте это другая сущность.
Ничего не понимаю, я передаю объект error в функцию error_handler и проверяю есть ли этот объект внутри словаря services.error_handler() (по   факту список).
Вообще error_handler находится в другом модуле, нежели ф-я foo
источник

EK

Evgeniy Kolbin in SPb Python
Ты уверен что функция config.fastapi_http_errors.values() тебя всегда отдаёт одно тоже значения?
источник

EK

Evgeniy Kolbin in SPb Python
Поменяй принт, убери везде error in
источник

DS

David Shiko in SPb Python
Evgeniy Kolbin
Ты уверен что функция config.fastapi_http_errors.values() тебя всегда отдаёт одно тоже значения?
Технически да, но id будет всегда разным, потому что метод values всегда возвращает разный id

d2 = {}
id(d2.values())
140140588958096
id(d2.values())
140140588959536
источник

EK

Evgeniy Kolbin in SPb Python
Сначала перепутал с comprehension, но потом понял что не то
источник

DS

David Shiko in SPb Python
Меня другое смущает, почему id(error) внутри foo и внутри error_handler возвращает разные результаты? Вот это для меня загадка
источник

EK

Evgeniy Kolbin in SPb Python
Наверно потому что разные объекты, они же не простые типы
источник

EK

Evgeniy Kolbin in SPb Python
a = 5
b = 5
print(id(a) == id(b))
True
a = 99999
b = 99999
print(id(a) == id(b))
False
источник

EK

Evgeniy Kolbin in SPb Python
Это конечно немного не про то, но для того что бы подумать
источник

DS

David Shiko in SPb Python
А нет, соврал, у них одинаковый id
источник

EK

Evgeniy Kolbin in SPb Python
Посмотри как работает проверка in
источник

EK

Evgeniy Kolbin in SPb Python
Что она сравнивает
источник

DS

David Shiko in SPb Python
Evgeniy Kolbin
Что она сравнивает
какая разницца что она сравниает, если предмет сравнения (и даже id) одинаковый, а результат разный
источник