Python 3.7 TypeError: отсутствует 1 обязательный позиционный аргумент: 'input'

Я уже выполнил свою функцию, но когда я запускаю веб-сервер, я получаю следующую ошибку:

TypeError: index () отсутствует 1 обязательный позиционный аргумент: 'input'

Это мой код:

from sklearn import tree
from flask import Flask

app = Flask(__name__)

@app.route('/', methods=['GET','POST'])
def index(input):
    input = [[1,1,2,3,3,1,1,2]]

    data = pd.read_csv('datawadek.csv')
    y = data.KELAS
    x = data.drop('KELAS', axis = 1)

    cart = tree.DecisionTreeClassifier()

    cart = cart.fit(x,y)

    return cart.predict(input)

if __name__ == '__main__':
    app.run(debug=True)

Я новичок в программировании на Python. Пожалуйста, помогите мне с любыми предложениями или решениями.

Хорошего дня


person Dewadek Krisna    schedule 19.11.2019    source источник
comment
Не называйте переменную input.   -  person AMC    schedule 19.11.2019


Ответы (1)


Я предполагаю, что вы хотите передать ввод в качестве параметра в колбу. Вы не можете определить ввод как параметры для функции конечной точки вашего фляги. Вместо этого вы должны прочитать параметры внутри указанной функции с request.args.get следующим образом:

@app.route('/', methods=['GET','POST'])
def index():
    input = request.args.get('input')
    if input is None:
        input = [[1,1,2,3,3,1,1,2]]

Из документов Python:

Объект request автоматически доступен из всех API-интерфейсов flask, и он содержит все данные, которые вы передаете через API-интерфейс. Для доступа к данным входящего запроса вы можете использовать глобальный объект запроса. Flask анализирует данные входящего запроса и предоставляет вам доступ к ним через этот глобальный объект. Внутренне Flask гарантирует, что вы всегда получаете правильные данные для активного потока, если вы находитесь в многопоточной среде.

РЕДАКТИРОВАТЬ:

В комментариях у нас был аналогичный пример с параметром пути:

@app.route('/<input>', methods=['GET','POST'])
def index(input):

окончательный результат будет идентичен моему первоначальному ответу выше, но он менее практичен с точки зрения дизайна. Вы могли бы использовать метод post для передачи массива данных, и в этом случае данные должны поступать внутри запроса.

Еще одна причина не делать этого заключается в том, что вам также следует всегда избегать передачи массива в качестве параметра пути, если только

person Simas Joneliunas    schedule 19.11.2019
comment
Вы можете передать имя в качестве параметра в представление фляги, только если в app.route есть регулярное выражение. @app.route('/<input:input>', methods=['GET', 'POST']) def index(input): - person Rahul Raut; 19.11.2019
comment
@RahulRaut ошибаюсь, я этого не понял, поэтому мне нужно изменить app = Flask (name) на app = Flask (param)? и изменить код app.route? - person Dewadek Krisna; 19.11.2019
comment
@DewadekKrisna Я обновил свой ответ, чтобы ответить на этот вопрос - person Simas Joneliunas; 19.11.2019
comment
@SimasJoneliunas, я уже обновляю свой код, как вы предлагаете, но после запуска на нем и перехода в Интернет, я получил 404, не найденный в Интернете, а в cmd я получил (typeerror: функция просмотра не вернула действительный ответ. Тип возврата должен быть строка, словарь, кортеж, экземпляр ответа или вызываемый WSGI, но это был ndarray) я сделал что-то не так? Мне так плохо, что я еще новичок в этих вещах - person Dewadek Krisna; 19.11.2019
comment
Ошибка говорит, что return cart.predict(input) результатом этого прогноза является массив numpy. Массив Numpy не является допустимым возвращаемым типом колбы. Таким образом, вы должны привести этот результат в список, как в return cart.predict(input).tolist(). См .: docs.scipy.org/doc/numpy/ ссылка / сгенерирована / - person Simas Joneliunas; 19.11.2019
comment
Я уже добавил его, но он все еще изменился, но это был код списка, - person Dewadek Krisna; 19.11.2019
comment
Мое плохое, видимо нужно вернуть ответ в формате json. См .: stackoverflow.com/questions/58433450/ - person Simas Joneliunas; 19.11.2019
comment
@SimasJoneliunas ааа, но можешь ли ты дать мне хотя бы правильный код? Ой, этот сервер запланирован для клиента приложений Android - person Dewadek Krisna; 19.11.2019
comment
Ответ был дан в вопросе, который я связал с вами ~ return jsonify({'predictions' : predictionsIm.tolist()}) - person Simas Joneliunas; 19.11.2019
comment
@SimasJoneliunas, поэтому я должен заменить return cart.predict (input) на return jsonify ({'predictions': predictionsIm.tolist ()})? - person Dewadek Krisna; 19.11.2019
comment
должно быть jsonify({'predictions' : cart.predict(input).tolist()}) - person Simas Joneliunas; 19.11.2019
comment
@SimasJoneliunas, спасибо, приятель, на этот раз в cmd нет ошибки (все еще 404 не найден в сети, возможно, это вызвано сервером) - person Dewadek Krisna; 19.11.2019