Python函数中后续elif语句被忽略,仅前两个生效的问题求助
问题分析与解决:elif分支被忽略的原因
核心错误
你代码里从NULL_COUNT_COMPARISON开始的所有elif分支都漏写了条件判断逻辑,直接写成了elif "NULL_COUNT_COMPARISON":这种形式。在Python中,非空字符串会被当作布尔值True,所以只要前面的if和elif scenario=="TOTAL_COUNT_COMPARISON"不匹配,第一个值为True的分支(也就是"NULL_COUNT_COMPARISON"分支)就会被触发,后面的所有elif分支都会被直接跳过,这就是后续分支始终不执行的原因。
修正后的代码
def findDiff(dbDict, s3dict, scenario): comparison = {} dtype_table_check = True if scenario == "DTYPE_COMPARISON": comparison["DTYPE_COMPARISON"] = {} for k in dbDict: comparison["DTYPE_COMPARISON"][k] = {} if k in s3dict: if dbDict == s3dict: comparison["DTYPE_COMPARISON"]["ALL_DATATYPES"] = {} comparison["DTYPE_COMPARISON"]["ALL_DATATYPES"]["RESULT"] = True break else: for ke in dbDict[k]: try: x = s3dict[k][ke] if dbDict[k][ke] == s3dict[k][ke]: comparison["DTYPE_COMPARISON"][k][ke] = {} comparison["DTYPE_COMPARISON"][k][ke]["RESULT"] = True else: comparison["DTYPE_COMPARISON"][k][ke] = {} comparison["DTYPE_COMPARISON"][k][ke]["RESULT"] = False dtype_table_check = False except KeyError: comparison["DTYPE_COMPARISON"][k][ke] = {} comparison["DTYPE_COMPARISON"][k][ke]["RESULT"] = False dtype_table_check = False else: comparison["DTYPE_COMPARISON"]["ALL_DATATYPES"]["RESULT"] = True comparison["DTYPE_COMPARISON"][k]["RESULT"] = dtype_table_check elif scenario == "TOTAL_COUNT_COMPARISON": comparison["TOTAL_COUNT_COMPARISON"] = {} for k in dbDict: if k in s3dict: if dbDict == s3dict: comparison["TOTAL_COUNT_COMPARISON"][k] = {} comparison["TOTAL_COUNT_COMPARISON"][k]["RESULT"] = True break else: comparison["TOTAL_COUNT_COMPARISON"][k] = {} if dbDict[k] == s3dict[k]: comparison["TOTAL_COUNT_COMPARISON"][k]["RESULT"] = True else: comparison["TOTAL_COUNT_COMPARISON"][k]["RESULT"] = False else: comparison["TOTAL_COUNT_COMPARISON"][k]["RESULT"] = False elif scenario == "NULL_COUNT_COMPARISON": comparison["NULL_COUNT_COMPARISON"] = {} for k in dbDict: if k in s3dict: if dbDict == s3dict: comparison["NULL_COUNT_COMPARISON"][k] = {} comparison["NULL_COUNT_COMPARISON"][k]["RESULT"] = True break else: comparison["NULL_COUNT_COMPARISON"][k] = {} if dbDict[k] == s3dict[k]: comparison["NULL_COUNT_COMPARISON"][k]["RESULT"] = True else: comparison["NULL_COUNT_COMPARISON"][k]["RESULT"] = False else: comparison["NULL_COUNT_COMPARISON"][k]["RESULT"] = False elif scenario == "UNIQUE_COUNT_COMPARISON": comparison["UNIQUE_COUNT_COMPARISON"] = {} for k in dbDict: if k in s3dict: if dbDict == s3dict: comparison["UNIQUE_COUNT_COMPARISON"][k] = {} comparison["UNIQUE_COUNT_COMPARISON"][k]["RESULT"] = True break else: comparison["UNIQUE_COUNT_COMPARISON"][k] = {} if dbDict[k] == s3dict[k]: comparison["UNIQUE_COUNT_COMPARISON"][k]["RESULT"] = True else: comparison["UNIQUE_COUNT_COMPARISON"][k]["RESULT"] = False else: comparison["UNIQUE_COUNT_COMPARISON"][k]["RESULT"] = False elif scenario == "UNIQUE_COMBINATION_COUNT_COMPARISON": comparison["UNIQUE_COMBINATION_COUNT_COMPARISON"] = {} for k in dbDict: if k in s3dict: if dbDict == s3dict: comparison["UNIQUE_COMBINATION_COUNT_COMPARISON"][k] = {} comparison["UNIQUE_COMBINATION_COUNT_COMPARISON"][k]["RESULT"] = True break else: comparison["UNIQUE_COMBINATION_COUNT_COMPARISON"][k] = {} if dbDict[k] == s3dict[k]: comparison["UNIQUE_COMBINATION_COUNT_COMPARISON"][k]["RESULT"] = True else: comparison["UNIQUE_COMBINATION_COUNT_COMPARISON"][k]["RESULT"] = False else: comparison["UNIQUE_COMBINATION_COUNT_COMPARISON"][k]["RESULT"] = False elif scenario == "DATAVALUE_COMPARISON": print("DATAVALUE_COMPARISON: ") # get table return comparison
额外注意点
除了修正条件判断,还统一了部分分支的缩进(比如UNIQUE_COUNT_COMPARISON分支之前的缩进层级错误),避免因缩进问题引发新的语法错误。
内容的提问来源于stack exchange,提问作者niacinamied_fiend
相关产品推荐
相关产品推荐

