Pylint显示错误,函数中的所有return语句都应返回表达式

问题描述

我有3个功能。 invalid_response,valid_response,lambda_handler

  • 我在AWS账户中享有适当的地位。但是在运行pylint时出现错误,或者函数中的所有return语句都应该返回一个表达式,或者都不应该返回任何表达式。 (不一致的退货声明)
  • 我试图将所有东西放到Lambda_handler中仍然出错

下面是代码

def invalid_response():
    response = {
        'statusCode': 404,'body': json.dumps("NA")
    }
    return response

def valid_response(response):
    response = {
        'statusCode': 200,'body': json.dumps(response)
    }
    return response
def lambda_handler(event,context):
    
        event_value = event['multiValuequerystringparameters']
        if event_value == '' or event_value is None:
            aresponse = invalid_response()
            return aresponse
        if event_value is not None or \
                event_value['q'][0] is not None:
            event_value_new = event['multiValuequerystringparameters']['q'][0]
            response = read_s3(event_value_new)
            if response:
                resp = valid_response(response)
            else:
                resp = invalid_response()
            return resp
  

解决方法

pylint很烦人,因为在带条件返回值的同时,有可能到达函数末尾而不返回任何内容。 Pylint不喜欢这样,因为由于无法处理重新计算的None值,它可能导致代码更容易引入错误和崩溃。

最干净的响应是在函数末尾添加一些默认响应,以便所有执行分支都返回相同类型的值。

def lambda_handler(event,context):
    
        event_value = event['multiValueQueryStringParameters']
        if event_value == '' or event_value is None:
            aresponse = invalid_response()
            return aresponse
        if event_value is not None or \
                event_value['q'][0] is not None:
            event_value_new = event['multiValueQueryStringParameters']['q'][0]
            response = read_s3(event_value_new)
            if response:
                resp = valid_response(response)
            else:
                resp = invalid_response()
            return resp

        # it is logically possible to reach this block
        return invalid_response()