اسم KeyError أثناء عمل API قارورة

0

أنا جديد في تطوير Flask وأحاول إنشاء واجهة برمجة تطبيقات للنشر ولكنها تنشر مرة واحدة فقط. أنا أستخدم ساعي البريد لاختبار نقطة نهاية واجهة برمجة التطبيقات هذه ، فهي تعطيني تتبع الخطأ هذا:

Traceback (most recent call last):   File "C:\Users\HPA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)   File "C:\Users\HPA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)   File "C:\Users\HPA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask_restful\__init__.py", line 273, in error_router
    return original_handler(e)   File "C:\Users\HPA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)   File "C:\Users\HPA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\_compat.py", line 34, in reraise
    raise value.with_traceback(tb)   File "C:\Users\HPA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()   File "C:\Users\HPA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)   File "C:\Users\HPA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask_restful\__init__.py", line 273, in error_router
    return original_handler(e)   File "C:\Users\HPA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)   File "C:\Users\HPA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\_compat.py", line 34, in reraise
    raise value.with_traceback(tb)   File "C:\Users\HPA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()   File "C:\Users\HPA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)   File "C:\Users\HPA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask_restful\__init__.py", line 480, in wrapper
    resp = resource(*args, **kwargs)   File "C:\Users\HPA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\views.py", line 88, in view
    return self.dispatch_request(*args, **kwargs)   File "C:\Users\HPA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask_restful\__init__.py", line 595, in dispatch_request
    resp = meth(*args, **kwargs)   File "D:\Ride my app\ride_my_app\app\rides\managerides.py", line 46, in post
    if on.strip() == ridereq['offername'].strip(): KeyError: 'offername'

فيما يلي الكود الخاص بي الذي يقوم بالنشر:

rides_list = []
class GetRides(Resource):
    id=0
    def post(self):
        parser = reqparse.RequestParser()
        parser.add_argument('offername', type=str, required=True)
        parser.add_argument('offerdetails', type=str, required=True)
        parser.add_argument('offerprice', type=float, required=True)
        #parser.add_argument('offerdby', type=float, required=True)
        parser.add_argument('token', location='headers')
        args = parser.parse_args()
         #check the token value if its available 
        if not args['token']:
            return make_response(jsonify({"message": "Token is missing"}), 401)
        decoded = decode_token(args['token'])
        if decoded["status"] == "Failure":
            return make_response(jsonify({"message": decoded["message"]}), 401)

        for user in my_users_list:
            if user['id'] == decoded['id']:
                if decoded['isDriver'] == "True":
                    on = args['offername']
                    od = args['offerdetails']
                    op = args['offerprice']
                    if on.strip() == "" or len(on.strip()) < 2:
                        return make_response(jsonify({"message": "Ride offer name  should be more than 2 letters"}), 400)

                    if re.compile('[[email protected]#$^&*:;?><.]').match(on):
                        return make_response(jsonify({"message": "Invalid characters not allowed while creating a ride offer"}), 400)
                    global id
                    if len(rides_list)==0:
                        id = len(rides_list)+1
                    else:
                        id = id+1
                    new_request = AddRide(id,on,od,op)
                    for ridereq in rides_list:
                        if on.strip() == ridereq['offername'].strip():
                            return make_response(jsonify({"message": 'This ride offer already exists.'}), 400)

                    ridereq = json.loads(new_request.json())
                    rides_list.append(ridereq)

                    return make_response(jsonify({
                    'message': 'ride offers successfully created',
                    'status': 'success'},
                ), 201)
                return make_response(jsonify({"message": "Passenger is not authorized to create ride offers"}), 401)

        return make_response(jsonify({"message": "Please first create an account."}), 401)

وفقًا لرسالة الخطأ ، تكون المشكلة في هذا السطر:

if on.strip() == ridereq['offername'].strip():

لكني لا أرى أي مشكلة ، ماذا يمكن أن تكون المشكلة؟

1 إجابة

0

يعني استثناء KeyError أنك تحاول الإشارة إلى مفتاح في إملاء غير موجود. في هذه الحالة ، فهذا يعني أن الاملاء ridereq لا يحتوي على مفتاح offername . إذا كان من المفترض أن يكون لديه مثل هذا المفتاح ، فأنت بحاجة إلى تتبع أي خلل في برنامجك يسببه ridereq['offername'] لا يتم تعيين قيمة له. كما اقترح المعلق الآخر ، رمي عبارة طباعة فوق هذا السطر للتحقق من قيمة ridereq سيكون مكان جيد للبدء.

أيضًا ، في نفس السطر ، أنت تحاول بشكل غير صحيح تعيين قيمة لـ on.strip() . لا يمكنك القيام بذلك بسبب on.strip() هو استدعاء دالة يقوم بإرجاع سلسلة (أي نتيجة استدعاء في .strip() طريقة on ). foo.strip() يجب ألا تظهر أبدًا على الجانب الأيسر من المهمة ، لأنه لا يمكنك تعيين قيمة لسلسلة.

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام