Django程式碼中的TypeError 'float' object is not callable

華科雲商小雪發表於2024-01-23

學習使用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(使用解析庫如 BeautifulSoup lxml )是必要的。這部分可以獨立於Django學習。

網上有大量的教程和指南,這些資源可以幫助你學習Django和爬蟲技術。理論學習之後,動手實踐是非常重要的。透過實際編寫和執行程式碼來加深理解。以上就是全部得內容,如果有更多學術探討,歡迎評論區留言討論。


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70034537/viewspace-3004740/,如需轉載,請註明出處,否則將追究法律責任。

相關文章