Разбирался в особенностях декоратора и столкнулся со странной проблемой

Рейтинг: 0Ответов: 1Опубликовано: 03.08.2023

Вот мой код:

def decor(x):
    def wrap():
        try:
            x()
        except:
            return ('error')
    return wrap
@decor
def f():
    a=5
    return (a)
@decor
def F():
    a=open('251.txt')
    w=a.read()
    return (w)
print(f())
print(F())

Вот что он выдает:

None
error

А хочу я чтобы он выдавал это:

5
error

Потом переделал код и он сработал как надо:

def decor(x):
    def wrap():
        try:
            x()
        except:
            print('error')
    return wrap

@decor
def f():
    a=5
    print(a)

@decor
def F():
    a=open('251.txt')
    w=a.read()
    print(w)

f()
F()

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

Ответы

▲ 2Принят

У вас выводится None, потому что вы пытаетесь вывести на печать результат функции x() которая ничего не возвращает.

Если вы хотите, чтобы функция возвращала значение переменной a, то добавьте return перед ее вызовом

def decor(x):
    def wrap():
        try:
            return x()
        except:
            return 'error'
    return wrap
@decor
def f():
    a=5
    return (a)
@decor
def F():
    a=open('251.txt')
    w=a.read()
    return (w)
print(f())
print(F())

Результат:

5
error

Но вообще тут структура кода полностью неправильная...