首页 > 解决方案 > Python Try后不执行Except?

问题描述

我被困在我的问题下方显示的 python 代码上。

此代码是监督神经网络项目的一部分。 encoder.inverse_transform(x)遇到未知标签时产生 ValueError。

我期望的是:代码为每个 x 返回一个结果,当 x 不在encoder.classes_结果中时 x 将是'Onbekend'.

它的作用是:当输出包含一个未知标签时,无论 x 的数量如何,代码都会产生一个“Onbekend”。似乎没有为 Output when 中的每个 x 执行 try 函数。

有谁知道我在这里想念什么?

import pandas as pd
from sklearn import model_selection
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import LabelEncoder
import bisect

# Dataframe creation
data = {'Text': ['Koffie', 'Auto onderdelen','Brandstof', 'Zeilen', 'Studie', 
'Cadeau', 'Telefoon'], 'Labels': ['Leven', 'Auto', 'Auto', 'Leven', 'Studie', 
'Leven', 'Telefonie']}
trainDF = pd.DataFrame(data=data,
                       dtype = str)

#split the dataset into training and validation datasets
train_x, valid_x, train_y, valid_y = 
model_selection.train_test_split(trainDF['Text'], trainDF['Labels'])

# label encode the target variable
encoder = LabelEncoder()
train_y = encoder.fit_transform(train_y)
valid_y = encoder.fit_transform(valid_y)

# Create a count vectorizer object
count_vect = CountVectorizer(analyzer = 'word', token_pattern='\w{1,}')
count_vect.fit(trainDF['Text'])

# Transform the training and validation data using count vectorizer object
xtrain_count = count_vect.transform(train_x)
xvalid_count = count_vect.transform(valid_x)

classifier = LogisticRegression()
classifier.fit(xtrain_count, train_y)

# Modelling
xinput_count = count_vect.transform(trainDF['Text'])
Output = classifier.predict(xinput_count)

for x in Output:
    b = b + 1
    try:
        R = encoder.inverse_transform(Output)
    except ValueError:
        R = 'Onbekend'

encoder_classes = encoder.classes_.tolist()
bisect.insort_left(encoder_classes, 'Onbekend')
encoder.classes_ = encoder_classes

print(R)

标签: pythonloopsfor-loopvalueerrorexcept

解决方案


代码应该是:

for x in Output:
    try:
        x = encoder.inverse_transform(x)
    except ValueError:
        x = 'Onbekend'
    print(x)

因为print(x)没有嵌套在 for 循环中,所以它会返回 x 的最后一个值,而不是完整的数组。

R = encoder.inverse_transform(Output)误导的部分是使用完整的输出数组的事实,print(R)将返回完整的数组,因为Output它只包含已知的标签,使它看起来像代码是正确的。


推荐阅读