Введите аннотацию подсказки для декоратора с новым синтаксисом.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Введите аннотацию подсказки для декоратора с новым синтаксисом.

Сообщение Anonymous »

Как аннотировать декоратор аргументами? Что мне следует передать, чтобы вернуть тип exc_wrapper?
import asyncio
from functools import wraps
from typing import Any, Awaitable, Callable, Type

def exc_wrapper(
exc_in: Type[Exception], exc_out: Type[Exception], *exc_args: Any, **exc_kwargs: Any
) -> Callable:
def decorator[**P, R](func: Callable[P, Awaitable[R] | R]) -> Callable[P, R | Awaitable[R]]:
@wraps(func)
def sync_wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
try:
return func(*args, **kwargs)
except exc_in:
raise exc_out(*exc_args, **exc_kwargs)

@wraps(func)
async def async_wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
try:
return await func(*args, **kwargs)
except exc_in:
raise exc_out(*exc_args, **exc_kwargs)

if asyncio.iscoroutinefunction(func):
return async_wrapper
else:
return sync_wrapper

return decorator

MyPy выдает такие ошибки:
src\core\utils\decorators.py:13: error: Incompatible return value type (got "Awaitable[R] | R", expected "R") [return-value]
src\core\utils\decorators.py:20: error: Incompatible types in "await" (actual type "Awaitable[R] | R", expected type "Awaitable[Any]") [misc]

Примеры:
class MyExc(BaseException): ...

@exc_wrapper(AssertionError, MyExc)
def sync_func():
assert false

@exc_wrapper(AssertionError, MyExc)
async def sync_func():
assert false


Подробнее здесь: https://stackoverflow.com/questions/791 ... new-syntax
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Введите аннотацию подсказки для декоратора с новым синтаксисом.
    Anonymous » » в форуме Python
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Введите аннотацию подсказки для декоратора вокруг функции синхронизации/асинхронизации.
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между синтаксисом метода и синтаксисом запроса?
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Когда использовать фабрику декоратора и декоратора?
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Когда использовать фабрику декоратора и декоратора?
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»