天天看點

【解決方法】——TypeError: object of type 'int' has no len()

最近跑程式時總是遇到一些奇怪的報錯,經常是昨天跑通了今天又不行了。

這次的錯誤:

File "E:/PyProject/main.py", line 99, in <module>
    predict_gender()
  File "E:/PyProject/main.py", line 80, in predict_gender
    model_gender.fit_transform(result_gender)
  File "E:\PyProject\model.py", line 368, in fit_transform
    index = StratifiedShuffleSplit(n, test_size=0.2, random_state=233)
  File "F:\Anaconda3\install\lib\site-packages\sklearn\cross_validation.py", line 1060, in __init__
    len(y), n_iter, test_size, train_size, random_state)
TypeError: object of type 'int' has no len()
           

報錯代碼:

index = StratifiedShuffleSplit(8, test_size=0.2, random_state=233)
for tra, val in index.split(self.X,self.y):
           

實際上這塊代碼屬于from sklearn.model_selection import StratifiedShuffleSplit的寫法,是python3.7更新的sklearn包,但是由于使用的代碼是之前寫的,跑的時候用的python3.6的環境,是以會報錯。

不建議按照他的提示改,那樣就沒完沒了了。

簡單的改法,将環境換到python3.6,調用包改成from sklearn.cross_validation import StratifiedShuffleSplit,代碼也進行修改:

這樣就通了。

這個就是python3.7和3.6的不同寫法了,大家可以根據實際看看是不是文法和配置環境是不是不比對造成的問題。