Django代码中的TypeError ‘float‘ object is not callable

发布时间:2024年01月24日

学习使用Django进行网页爬取取决于你对Python、Django框架和网络爬虫的熟悉程度。以下是一些关键点,总的来说,如果你已经具备Python和Django的基础知识,并对网页爬虫有一定了解,那么学习使用Django进行网页爬取将会比较容易。如果你是一个完全的初学者,那么可能需要更多的时间和努力来掌握所需的所有技能。不过,通过逐步学习和实践,这是完全可行的。比如我遇到得下面得问题以及我得应对方法。

在这里插入图片描述

问题背景

在Django代码中,遇到一个TypeError: ‘float’ object is not callable的错误。

这个错误发生在几个property装饰器的方法中,例如:

@property
def pmt_loaner_final(self):
    return float(self.pmt_loaner_new) + float(self.debit_fee)

@property
def pmt_broker_final(self):
    return float(self.pmt_broker_new) + float(self.debit_fee)

@property
def total_compounded_broker(self):
    return self.compounded_amount(self.brokerage_fees)

@property
def total_compounded_loaner(self):
    return self.compounded_amount(self.amount)

这些property装饰器的方法试图将浮点数转换为整数,但由于浮点数不是可调用的对象,因此抛出TypeError: ‘float’ object is not callable的错误。

另外,在以下代码段中,也遇到了同样的错误:

@property
def discount(self):
    return self.final_credit_rate(
        self.pmt_loaner_final + self.pmt_broker_final,
        self.total_compounded_loaner + self.total_compounded_broker
    )

在该代码段中,试图将a+b和c+d的和作为实参传递给final_credit_rate方法,但是由于a+b和c+d都是浮点数,因此抛出TypeError: ‘float’ object is not callable的错误。

除此之外,还尝试使用final_pmt_without_withdrawal_fees和total_compounded作为实参传递给get_final_credit_rate方法,也遇到了同样的错误。

解决方案

对于这个问题,有两种可能的解决方案:

1、移除@property装饰器

如果不需要将这些方法作为property属性来使用,可以移除@property装饰器,并将这些方法定义为普通的函数。这样就可以直接调用这些方法,而不会抛出TypeError: ‘float’ object is not callable的错误。

2、使用括号调用property属性

如果需要将这些方法作为property属性来使用,可以使用括号来调用这些属性。例如:

discount = computation.final_credit_rate(
    computation.pmt_loaner_final() + computation.pmt_broker_final(),
    computation.total_compounded_loaner() + computation.total_compounded_broker()
)

通过使用括号来调用property属性,就可以避免TypeError: ‘float’ object is not callable的错误。

对于第二个问题,需要将a+b和c+d的和转换为整数,然后再作为实参传递给final_credit_rate方法。例如:

discount = computation.final_credit_rate(
    int(computation.pmt_loaner_final()) + int(computation.pmt_broker_final()),
    int(computation.total_compounded_loaner()) + int(computation.total_compounded_broker())
)

通过将a+b和c+d的和转换为整数,就可以避免TypeError: ‘float’ object is not callable的错误。

对于第三个问题,需要将final_pmt_without_withdrawal_fees和total_compounded转换为整数,然后再作为实参传递给get_final_credit_rate方法。例如:

final_credit_rate = computation.get_final_credit_rate(
    int(computation.final_pmt_without_withdrawal_fees()),
    int(computation.total_compounded())
)

通过将final_pmt_without_withdrawal_fees和total_compounded转换为整数,就可以避免TypeError: ‘float’ object is not callable的错误。

了解如何爬取网页(使用请求库如requests)、解析HTML(使用解析库如BeautifulSouplxml)是必要的。这部分可以独立于Django学习。

网上有大量的教程和指南,这些资源可以帮助你学习Django和爬虫技术。理论学习之后,动手实践是非常重要的。通过实际编写和运行代码来加深理解。以上就是全部得内容,如果有更多学术探讨,欢迎评论区留言讨论。

文章来源:https://blog.csdn.net/weixin_44617651/article/details/135763799
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。