这个为什么会报错,求解

img

str对象不可调用,将装饰器函数的返回改一下,这样改写就行了,参考http://c.biancheng.net/view/2270.html。

def add_out(func):
    def add_in():
        return f"《{func()}》"
    return add_in
def add_out1(func):
    def add_in1():
        return f"¥{func()}¥"
    return add_in1
@add_out
@add_out1
def book_name():
    return 'sss'
print(book_name())

如对你有帮助,请点击我回答的采纳按钮采纳一下。

因为python中不能这样写字符串 需要用str函数

def add_out(string):
    print(type(string)) #是字符串
    def add_in():
        return "《"+string+"》"
    return add_in()

def add_out1(func):
    def add_in1():
        return "¥"+func()+"¥" #返回的是字符串
    return add_in1()

@add_out
@add_out1
def book_name():
    return 'sss'

print(book_name)

先执行def add_out1(func):
add_out1()中返回的是 "¥"+func()+"¥" 字符串

传到def add_out(string):中string就是字符串,不是函数了,字符串不能用()调用。


或者是 def add_out1(func): 的return add_in1 不加(),把add_in1函数返回
传到def add_out(func): 中 func就是函数了

def add_out(func): # func就是函数了
    def add_in():
        return "《"+func()+"》"
    return add_in()

def add_out1(func):
    def add_in1():
        return "¥"+func()+"¥"
    return add_in1 #不加(),把add_in1函数返回


@add_out
@add_out1
def book_name():
    return 'sss'

print(book_name)