Size: a a a

Сообщество Python Программистов

2020 June 19

VA

Vadim Apenko in Сообщество Python Программистов
Я вообще последнее время логгер юзаю так
источник

т

тⁿ in Сообщество Python Программистов
Vadim Apenko
Я вообще последнее время логгер юзаю так
Удобно) Возьму на заметку, хех.
источник

R

RickHentai in Сообщество Python Программистов
тⁿ
Такие вещи получают глобально в модуле
помогло, спасибо
источник

VA

Vadim Apenko in Сообщество Python Программистов
тⁿ
Удобно) Возьму на заметку, хех.
Конкретно это для AWS CloudWatch. Там JSON закидывать можно, и он там парсится правильно.
источник

R

RickHentai in Сообщество Python Программистов
Vadim Apenko
Я вообще последнее время логгер юзаю так
это какой то отдельный стиль логирования?как называется? я просто ещё не дошел до raise)
источник

т

тⁿ in Сообщество Python Программистов
raise просто эксепшен выкидывает
источник

т

тⁿ in Сообщество Python Программистов
Типа, отловил, что-то сделал, а потом его выпустил, чтобы код остановился
источник

R

RickHentai in Сообщество Python Программистов
а просто
            except Exception as err:
               LOGGER.error(...
не так отрабатывает?
источник

VA

Vadim Apenko in Сообщество Python Программистов
RickHentai
а просто
            except Exception as err:
               LOGGER.error(...
не так отрабатывает?
лог будет, а экзепшн проглотишь
источник

т

тⁿ in Сообщество Python Программистов
Vadim Apenko
Конкретно это для AWS CloudWatch. Там JSON закидывать можно, и он там парсится правильно.
Это типа удалённо лог сохраняется на облаке?
источник

VA

Vadim Apenko in Сообщество Python Программистов
тⁿ
Это типа удалённо лог сохраняется на облаке?
да
источник

VA

Vadim Apenko in Сообщество Python Программистов
тⁿ
Это типа удалённо лог сохраняется на облаке?
ну фактически сохраняется он локально, а уже демон awslogs кладёт его в облако
источник

VA

Vadim Apenko in Сообщество Python Программистов
Все же видели это? в 3.9 запилили. Мне не нравится, если честно...
источник

VA

Vadim Apenko in Сообщество Python Программистов
Syntax for decorators is limited by getting attributes and calling objects:

decos = {
 'id': lambda x: x,
}

@decos['id']
def f(): pass
# SyntaxError: invalid syntax


Python 3.9 (via PEP-614) relaxes with restriction allowing to have any expression as a decorator:

decos = {
 'id': lambda x: x,
}

@decos['id']
def f(): pass

f
# <function f at ...>


You can use matrix multiplication to make it confusing (don't try it at home!):

class D:
 f = None
 def __init__(self, name):
   self.name = name

 def __call__(self, *args, **kwargs):
   # on the first call save the function
   if self.f is None:
     self.f = args[0]
     return self
   # on all the next calls call the function
   print(f'hello from {self.name}!')
   return self.f(*args, **kwargs)

 # matrix multiplication logic
 def __matmul__(self, other):
   return lambda f: self(other(f))

# the second `@` is actually the matrix multiplication
@D('a') @D('b')
def f(): pass

f()
# hello from a!
# hello from b!


You can use a simple wrapper function to have any expression in older python versions:

_ = lambda x: x

@_(D('a') @ D('b'))
def f(): pass
источник

VA

Vadim Apenko in Сообщество Python Программистов
Пользоваться этим, я, конечно, не буду)
источник

VA

Vadim Apenko in Сообщество Python Программистов
А вот то что типы вытащили наружу из typing - оч круто
источник

VA

Vadim Apenko in Сообщество Python Программистов
More cool things from Python 3.9. PEP-585 introduced generic types support for the built-in types:

# before 3.9:
from typing import List, Type
lst: List[int] = [1, 2, 3]
t: Type[int] = float

# from python 3.9:
lst: list[int] = [1, 2, 3]
t: type[int] = float


So, now, from typing import will become much shorter! Hooray! The next step would be to support int & str instead of Union[int, str].

The only purpose of these types is type annotations. They don't make any runtime type checks:

list[str]({1, 2, 3})
# [1, 2, 3]

isinstance([1, 2, 3], list[str])
# TypeError: isinstance() arg 2 cannot be a parameterized generic
источник

VA

Vadim Apenko in Сообщество Python Программистов
с typing вообще странно было (и сейчас до 3.9 есть), когда часть типов типа list, tuple, int, str доступны и так, а вот расширенные типы (List[], Tuple[], Iterator[], ) не доступны
источник

т

тⁿ in Сообщество Python Программистов
Расширенные типы не всегда нужны
источник

VA

Vadim Apenko in Сообщество Python Программистов
тⁿ
Расширенные типы не всегда нужны
Почти всегда, если ты вообще хинтами пользуешься
источник