В первом ответе уже сказано: Mono ни на что другое, кроме Windows, не приходит ни с чем, поэтому изначально он не доверяет никакому сертификату. Итак, что делать?
Вот хорошая статья о различных способах решения проблемы с точки зрения разработчика: http://www.mono-project.com/archived/usingtrustedrootsrespectfully/
Краткое описание: вы можете:
Вышеупомянутая ссылка содержит примеры кода для каждого случая.
Поскольку выводится Model not present, run train.py first
, мы знаем, что IOError
было поднято внутри predict
, но предложение except
просто вызывает print
, что означает, что predict
вернет None
.
Затем вы делаете predict([sys.argv[1]]) * 100)
, что означает, что вы пытаетесь сделать None * 100
(как предполагает трассировка стека), что не имеет никакого смысла.
Есть несколько способов исправить это, например, позволить распространению исключения:
def predict(headline):
f = open('trained_model')
clf = pickle.load(f)
f = open('vectorizer')
vectorizer = pickle.load(f)
return clf.predict_proba(vectorizer.transform(headline))[0][1]
if __name__ == "__main__":
try:
print ("headline is " + str(int(predict([sys.argv[1]])*100)) + "% likely to be clickbait")
except IOError:
print("Model not present, run train.py first")
или проверить, является ли его возвращаемое значение None
, прежде чем его использовать:
if __name__ == "__main__":
predict_result = predict([sys.argv[1]])
if predict_result is not None:
print ("headline is " + str(int(predict_result * 100)) + "% likely to be clickbait")