У меня есть ниже код PythonPython ---- TypeError: строковые индексы должны быть целыми
from flask import Flask, jsonify, json
app = Flask(__name__)
with open('C:/test.json', encoding="latin-1") as f:
dataset = json.loads(f.read())
@app.route('/api/PDL/<string:dataset_identifier>', methods=['GET'])
def get_task(dataset_identifier):
global dataset
dataset = [dataset for dataset in dataset if dataset['identifier'] == dataset_identifier]
if len(task) == 0:
abort(404)
return jsonify({'dataset': dataset})
if __name__ == '__main__':
app.run(debug=True)
Test.json выглядит следующим образом:
{
"dataset": [{
"bureauCode": [
"016:00"
],
"description": "XYZ",
"contactPoint": {
"fn": "AG",
"hasEmail": "mailto:[email protected]"
},
"distribution": [
{
"format": "XLS",
"mediaType": "application/vnd.ms-excel",
"downloadURL": "https://www.example.com/xyz.xls"
}
],
"programCode": [
"000:000"
],
"keyword": [ "return to work",
],
"modified": "2015-10-14",
"title": "September 2015",
"publisher": {
"name": "abc"
},
"identifier": US-XYZ-ABC-36,
"rights": null,
"temporal": null,
"describedBy": null,
"accessLevel": "public",
"spatial": null,
"license": "http://creativecommons.org/publicdomain/zero/1.0/",
"references": [
"http://www.example.com/example.html"
]
}
],
"conformsTo": "https://example.com"
}
Когда я передать переменную в URL как это: http://127.0.0.1:5000/api/PDL/1403
я получаю следующее сообщение об ошибке: TypeError: string indices must be integers
Зная, что поле «идентификатор» является строкой, и я передаю следующее URL-адрес:
http://127.0.0.1:5000/api/PDL/"US-XYZ-ABC-36"
http://127.0.0.1:5000/api/PDL/US-XYZ-ABC-36
Я получаю следующее сообщение об ошибке:
TypeError: string indices must be integers
Любая идея о том, что я здесь отсутствует? Я новичок в Python!
не использовать то же имя переменной, как ваш итератор и список в список вашего понимания –
Не только OP используется имя дважды в списке компе, но он также назначен результат с тем же именем. –
@ DanielRoseman: И в Py2 это также замедлит работу, потому что список comps разделяет область (так что все использование 'dataset' будет делить глобальное, включая переназначение глобального снова и снова), что замедляет работу, а не только сбивает с толку. По крайней мере, в Py3 список comps (например, выражений генератора и set/dict comps) имеет закрытие, которое защитит их от этой неэффективности. – ShadowRanger