How to handle “TypeError: 'NoneType' object is not subscriptable” in json key?
How to handle “TypeError: 'NoneType' object is not subscriptable” in json key?
我正在尝试从外部数据设置 json 键的值,但某些 json 数据没有键,然后我得到“TypeError: 'NoneType'对象不可订阅”消息。
fund_financial_dictionary['ratings_tenyear_pasardanarating']= ('' if DATA['Ratings']['TenYear']['PasardanaRating'] is None else DATA['Ratings']['TenYear']['PasardanaRating'])
fund_financial_dictionary['ratings_tenyear_riskrating']= ('' if DATA['Ratings']['TenYear']['RiskRating'] is None else DATA['Ratings']['TenYear']['RiskRating'])
fund_financial_dictionary['ratings_tenyear_risktext']= ('' if DATA['Ratings']['TenYear']['RiskText'] is None else DATA['Ratings']['TenYear']['RiskText'])
fund_financial_dictionary['ratings_fiveyear_pasardanarating']= ('' if DATA['Ratings']['FiveYear']['PasardanaRating'] is None else DATA['Ratings']['FiveYear']['PasardanaRating'])
fund_financial_dictionary['ratings_fiveyear_riskrating']= ('' if DATA['Ratings']['FiveYear']['RiskRating'] is None else DATA['Ratings']['FiveYear']['RiskRating'])
fund_financial_dictionary['ratings_fiveyear_risktext']= ('' if DATA['Ratings']['FiveYear']['RiskText'] is None else DATA['Ratings']['FiveYear']['RiskText'])
fund_financial_dictionary['ratings_threeyear_pasardanarating']= ('' if DATA['Ratings']['ThreeYear']['PasardanaRating'] is None else DATA['Ratings']['ThreeYear']['PasardanaRating'])
fund_financial_dictionary['ratings_threeyear_riskrating']= ('' if DATA['Ratings']['ThreeYear']['RiskRating'] is None else DATA['Ratings']['ThreeYear']['RiskRating'])
fund_financial_dictionary['ratings_threeyear_risktext']= ('' if DATA['Ratings']['ThreeYear']['RiskText'] is None else DATA['Ratings']['ThreeYear']['RiskText'])
fund_financial_dictionary['ratings_oneyear_pasardanarating']= ('' if DATA['Ratings']['OneYear']['PasardanaRating'] is None else DATA['Ratings']['OneYear']['PasardanaRating'])
fund_financial_dictionary['ratings_oneyear_riskrating']= ('' if DATA['Ratings']['OneYear']['RiskRating'] is None else DATA['Ratings']['OneYear']['RiskRating'])
fund_financial_dictionary['ratings_oneyear_risktext']= ('' if DATA['Ratings']['OneYear']['RiskText'] is None else DATA['Ratings']['OneYear']['RiskText'])
fund_financial_dictionary['ratings_weighted_pasardanarating']= ('' if DATA['Ratings']['Weighted']['PasardanaRating'] is None else DATA['Ratings']['Weighted']['PasardanaRating'])
fund_financial_dictionary['ratings_weighted_riskrating']= ('' if DATA['Ratings']['Weighted']['RiskRating'] is None else DATA['Ratings']['Weighted']['RiskRating'])
fund_financial_dictionary['ratings_weighted_risktext']= ('' if DATA['Ratings']['Weighted']['RiskText'] is None else DATA['Ratings']['Weighted']['RiskText'])
根据代码,我已经设置了如果 json 键不存在然后将值设置为 '' 但不断收到错误消息。
如何处理 Nonetype 的 json 数据?
错误的部分是当我调用 DATA['Ratings']['TenYear']['PasardanaRating'], DATA['Ratings']['TenYear'] ['RiskRating'] 和 DATA['Ratings']['TenYear']['RiskText'] 因为 DATA['Ratings']['TenYear'] 为空。
即使 DATA['Ratings']['TenYear'] 为空,我想设置为 DATA['Ratings']['TenYear']['PasardanaRating'] , DATA['Ratings']['TenYear']['RiskRating'] 和 DATA['Ratings']['TenYear']['RiskText'] 作为''
这是我无法处理的数据之一。
{
"AUM": 13455411755.91,
"NAV": 1057.8951,
"NAVDayReturn": 0.01911,
"Ratings": {
"TenYear": null,
"FiveYear": {
"PasardanaRating": 3,
"RiskRating": 4,
"RiskText": "Medium-High"
},
"ThreeYear": {
"PasardanaRating": 3,
"RiskRating": 2,
"RiskText": "Medium-Low"
},
"OneYear": {
"PasardanaRating": 3,
"RiskRating": 5,
"RiskText": "High"
},
"Weighted": {
"PasardanaRating": 3,
"RiskRating": 3,
"RiskText": "Medium"
}
},
"DateBased": "2021-08-03T00:00:00",
"Return": {
"MtD": {
"Value": 0.04949,
"CategoryValue": 0.01110404,
"DifferenceValue": 0.03838596
},
"OneMonth": {
"Value": 0.00040371,
"CategoryValue": 0.00516779,
"DifferenceValue": -0.00476408
},
"ThreeMonth": {
"Value": 0.06302,
"CategoryValue": -0.02284299,
"DifferenceValue": 0.08586299
},
"SixMonth": {
"Value": 0.07545457,
"CategoryValue": -0.01153106,
"DifferenceValue": 0.08698563
},
"YtD": {
"Value": 0.0332,
"CategoryValue": -0.06994184,
"DifferenceValue": 0.10314184
},
"Inception": {
"Value": 0.0578951000000001,
"CategoryValue": null,
"DifferenceValue": null
},
"OneYear": {
"Value": 0.14207,
"CategoryValue": 0.0763741,
"DifferenceValue": 0.0656959
},
"ThreeYear": {
"Value": -0.13457,
"CategoryValue": -0.19829078,
"DifferenceValue": 0.06372078
},
"FiveYear": {
"Value": -0.1152,
"CategoryValue": -0.24053268,
"DifferenceValue": 0.12533268
},
"TenYear": {
"Value": null,
"CategoryValue": -0.03059009,
"DifferenceValue": null
}
},
"StandardDeviation": {
"OneYear": {
"Value": 0.24871236,
"CategoryValue": 0.20789916,
"DifferenceValue": 0.0408132
},
"ThreeYear": {
"Value": 0.21027744,
"CategoryValue": 0.22958157,
"DifferenceValue": -0.01930413
},
"FiveYear": {
"Value": 0.235776,
"CategoryValue": 0.21208052,
"DifferenceValue": 0.02369548
},
"TenYear": {
"Value": null,
"CategoryValue": 0.21177752,
"DifferenceValue": null
}
},
"JensenAlpha": {
"OneYear": {
"Value": 0.07728372,
"CategoryValue": 0.03103865,
"DifferenceValue": 0.04624507
},
"ThreeYear": {
"Value": -0.07758734,
"CategoryValue": -0.05263175,
"DifferenceValue": -0.02495559
},
"FiveYear": {
"Value": -0.06454733,
"CategoryValue": -0.05391522,
"DifferenceValue": -0.01063211
},
"TenYear": {
"Value": null,
"CategoryValue": -0.02367435,
"DifferenceValue": null
}
},
"Beta": {
"OneYear": {
"Value": 0.39069079,
"CategoryValue": 0.94403761,
"DifferenceValue": -0.55334682
},
"ThreeYear": {
"Value": 0.41606153,
"CategoryValue": 0.95133773,
"DifferenceValue": -0.5352762
},
"FiveYear": {
"Value": 0.49088194,
"CategoryValue": 0.99480668,
"DifferenceValue": -0.50392474
},
"TenYear": {
"Value": null,
"CategoryValue": 1.06406416,
"DifferenceValue": null
}
},
"SharpeRatio": {
"OneYear": {
"Value": 0.36649671,
"CategoryValue": 0.26775235,
"DifferenceValue": 0.09874436
},
"ThreeYear": {
"Value": -0.54129229,
"CategoryValue": -0.60091353,
"DifferenceValue": 0.05962124
},
"FiveYear": {
"Value": -0.38000582,
"CategoryValue": -0.49425179,
"DifferenceValue": 0.11424597
},
"TenYear": {
"Value": null,
"CategoryValue": -0.26251333,
"DifferenceValue": null
}
},
"ModifiedSharpeRatio": {
"OneYear": {
"Value": 0.36649671,
"CategoryValue": 0.3738741,
"DifferenceValue": -0.00737739
},
"ThreeYear": {
"Value": -0.02393411,
"CategoryValue": -0.02597994,
"DifferenceValue": 0.00204583
},
"FiveYear": {
"Value": -0.02112465,
"CategoryValue": -0.01905189,
"DifferenceValue": -0.00207276
},
"TenYear": {
"Value": null,
"CategoryValue": -0.01064366,
"DifferenceValue": null
}
},
"TreynorRatio": {
"OneYear": {
"Value": 0.2333105,
"CategoryValue": -0.6772975,
"DifferenceValue": 0.910608
},
"ThreeYear": {
"Value": -0.27356905,
"CategoryValue": -0.27921153,
"DifferenceValue": 0.00564248
},
"FiveYear": {
"Value": -0.18252098,
"CategoryValue": -0.15847425,
"DifferenceValue": -0.02404673
},
"TenYear": {
"Value": null,
"CategoryValue": -0.05721129,
"DifferenceValue": null
}
},
"SortinoRatio": {
"OneYear": {
"Value": 0.74786865,
"CategoryValue": 0,
"DifferenceValue": 0.74786865
},
"ThreeYear": {
"Value": -0.91756146,
"CategoryValue": 0,
"DifferenceValue": -0.91756146
},
"FiveYear": {
"Value": -0.60572345,
"CategoryValue": 0,
"DifferenceValue": -0.60572345
},
"TenYear": {
"Value": null,
"CategoryValue": 0,
"DifferenceValue": null
}
}
}
你的例子中的问题是 DATA['Ratings']['TenYear'] is None
fund_financial_dictionary['ratings_tenyear_pasardanarating'] = ('' if DATA['Ratings']['TenYear'] is None else DATA['Ratings']['TenYear'].get('PasardanaRating', ''))
我正在尝试从外部数据设置 json 键的值,但某些 json 数据没有键,然后我得到“TypeError: 'NoneType'对象不可订阅”消息。
fund_financial_dictionary['ratings_tenyear_pasardanarating']= ('' if DATA['Ratings']['TenYear']['PasardanaRating'] is None else DATA['Ratings']['TenYear']['PasardanaRating'])
fund_financial_dictionary['ratings_tenyear_riskrating']= ('' if DATA['Ratings']['TenYear']['RiskRating'] is None else DATA['Ratings']['TenYear']['RiskRating'])
fund_financial_dictionary['ratings_tenyear_risktext']= ('' if DATA['Ratings']['TenYear']['RiskText'] is None else DATA['Ratings']['TenYear']['RiskText'])
fund_financial_dictionary['ratings_fiveyear_pasardanarating']= ('' if DATA['Ratings']['FiveYear']['PasardanaRating'] is None else DATA['Ratings']['FiveYear']['PasardanaRating'])
fund_financial_dictionary['ratings_fiveyear_riskrating']= ('' if DATA['Ratings']['FiveYear']['RiskRating'] is None else DATA['Ratings']['FiveYear']['RiskRating'])
fund_financial_dictionary['ratings_fiveyear_risktext']= ('' if DATA['Ratings']['FiveYear']['RiskText'] is None else DATA['Ratings']['FiveYear']['RiskText'])
fund_financial_dictionary['ratings_threeyear_pasardanarating']= ('' if DATA['Ratings']['ThreeYear']['PasardanaRating'] is None else DATA['Ratings']['ThreeYear']['PasardanaRating'])
fund_financial_dictionary['ratings_threeyear_riskrating']= ('' if DATA['Ratings']['ThreeYear']['RiskRating'] is None else DATA['Ratings']['ThreeYear']['RiskRating'])
fund_financial_dictionary['ratings_threeyear_risktext']= ('' if DATA['Ratings']['ThreeYear']['RiskText'] is None else DATA['Ratings']['ThreeYear']['RiskText'])
fund_financial_dictionary['ratings_oneyear_pasardanarating']= ('' if DATA['Ratings']['OneYear']['PasardanaRating'] is None else DATA['Ratings']['OneYear']['PasardanaRating'])
fund_financial_dictionary['ratings_oneyear_riskrating']= ('' if DATA['Ratings']['OneYear']['RiskRating'] is None else DATA['Ratings']['OneYear']['RiskRating'])
fund_financial_dictionary['ratings_oneyear_risktext']= ('' if DATA['Ratings']['OneYear']['RiskText'] is None else DATA['Ratings']['OneYear']['RiskText'])
fund_financial_dictionary['ratings_weighted_pasardanarating']= ('' if DATA['Ratings']['Weighted']['PasardanaRating'] is None else DATA['Ratings']['Weighted']['PasardanaRating'])
fund_financial_dictionary['ratings_weighted_riskrating']= ('' if DATA['Ratings']['Weighted']['RiskRating'] is None else DATA['Ratings']['Weighted']['RiskRating'])
fund_financial_dictionary['ratings_weighted_risktext']= ('' if DATA['Ratings']['Weighted']['RiskText'] is None else DATA['Ratings']['Weighted']['RiskText'])
根据代码,我已经设置了如果 json 键不存在然后将值设置为 '' 但不断收到错误消息。
如何处理 Nonetype 的 json 数据?
错误的部分是当我调用 DATA['Ratings']['TenYear']['PasardanaRating'], DATA['Ratings']['TenYear'] ['RiskRating'] 和 DATA['Ratings']['TenYear']['RiskText'] 因为 DATA['Ratings']['TenYear'] 为空。
即使 DATA['Ratings']['TenYear'] 为空,我想设置为 DATA['Ratings']['TenYear']['PasardanaRating'] , DATA['Ratings']['TenYear']['RiskRating'] 和 DATA['Ratings']['TenYear']['RiskText'] 作为''
这是我无法处理的数据之一。
{
"AUM": 13455411755.91,
"NAV": 1057.8951,
"NAVDayReturn": 0.01911,
"Ratings": {
"TenYear": null,
"FiveYear": {
"PasardanaRating": 3,
"RiskRating": 4,
"RiskText": "Medium-High"
},
"ThreeYear": {
"PasardanaRating": 3,
"RiskRating": 2,
"RiskText": "Medium-Low"
},
"OneYear": {
"PasardanaRating": 3,
"RiskRating": 5,
"RiskText": "High"
},
"Weighted": {
"PasardanaRating": 3,
"RiskRating": 3,
"RiskText": "Medium"
}
},
"DateBased": "2021-08-03T00:00:00",
"Return": {
"MtD": {
"Value": 0.04949,
"CategoryValue": 0.01110404,
"DifferenceValue": 0.03838596
},
"OneMonth": {
"Value": 0.00040371,
"CategoryValue": 0.00516779,
"DifferenceValue": -0.00476408
},
"ThreeMonth": {
"Value": 0.06302,
"CategoryValue": -0.02284299,
"DifferenceValue": 0.08586299
},
"SixMonth": {
"Value": 0.07545457,
"CategoryValue": -0.01153106,
"DifferenceValue": 0.08698563
},
"YtD": {
"Value": 0.0332,
"CategoryValue": -0.06994184,
"DifferenceValue": 0.10314184
},
"Inception": {
"Value": 0.0578951000000001,
"CategoryValue": null,
"DifferenceValue": null
},
"OneYear": {
"Value": 0.14207,
"CategoryValue": 0.0763741,
"DifferenceValue": 0.0656959
},
"ThreeYear": {
"Value": -0.13457,
"CategoryValue": -0.19829078,
"DifferenceValue": 0.06372078
},
"FiveYear": {
"Value": -0.1152,
"CategoryValue": -0.24053268,
"DifferenceValue": 0.12533268
},
"TenYear": {
"Value": null,
"CategoryValue": -0.03059009,
"DifferenceValue": null
}
},
"StandardDeviation": {
"OneYear": {
"Value": 0.24871236,
"CategoryValue": 0.20789916,
"DifferenceValue": 0.0408132
},
"ThreeYear": {
"Value": 0.21027744,
"CategoryValue": 0.22958157,
"DifferenceValue": -0.01930413
},
"FiveYear": {
"Value": 0.235776,
"CategoryValue": 0.21208052,
"DifferenceValue": 0.02369548
},
"TenYear": {
"Value": null,
"CategoryValue": 0.21177752,
"DifferenceValue": null
}
},
"JensenAlpha": {
"OneYear": {
"Value": 0.07728372,
"CategoryValue": 0.03103865,
"DifferenceValue": 0.04624507
},
"ThreeYear": {
"Value": -0.07758734,
"CategoryValue": -0.05263175,
"DifferenceValue": -0.02495559
},
"FiveYear": {
"Value": -0.06454733,
"CategoryValue": -0.05391522,
"DifferenceValue": -0.01063211
},
"TenYear": {
"Value": null,
"CategoryValue": -0.02367435,
"DifferenceValue": null
}
},
"Beta": {
"OneYear": {
"Value": 0.39069079,
"CategoryValue": 0.94403761,
"DifferenceValue": -0.55334682
},
"ThreeYear": {
"Value": 0.41606153,
"CategoryValue": 0.95133773,
"DifferenceValue": -0.5352762
},
"FiveYear": {
"Value": 0.49088194,
"CategoryValue": 0.99480668,
"DifferenceValue": -0.50392474
},
"TenYear": {
"Value": null,
"CategoryValue": 1.06406416,
"DifferenceValue": null
}
},
"SharpeRatio": {
"OneYear": {
"Value": 0.36649671,
"CategoryValue": 0.26775235,
"DifferenceValue": 0.09874436
},
"ThreeYear": {
"Value": -0.54129229,
"CategoryValue": -0.60091353,
"DifferenceValue": 0.05962124
},
"FiveYear": {
"Value": -0.38000582,
"CategoryValue": -0.49425179,
"DifferenceValue": 0.11424597
},
"TenYear": {
"Value": null,
"CategoryValue": -0.26251333,
"DifferenceValue": null
}
},
"ModifiedSharpeRatio": {
"OneYear": {
"Value": 0.36649671,
"CategoryValue": 0.3738741,
"DifferenceValue": -0.00737739
},
"ThreeYear": {
"Value": -0.02393411,
"CategoryValue": -0.02597994,
"DifferenceValue": 0.00204583
},
"FiveYear": {
"Value": -0.02112465,
"CategoryValue": -0.01905189,
"DifferenceValue": -0.00207276
},
"TenYear": {
"Value": null,
"CategoryValue": -0.01064366,
"DifferenceValue": null
}
},
"TreynorRatio": {
"OneYear": {
"Value": 0.2333105,
"CategoryValue": -0.6772975,
"DifferenceValue": 0.910608
},
"ThreeYear": {
"Value": -0.27356905,
"CategoryValue": -0.27921153,
"DifferenceValue": 0.00564248
},
"FiveYear": {
"Value": -0.18252098,
"CategoryValue": -0.15847425,
"DifferenceValue": -0.02404673
},
"TenYear": {
"Value": null,
"CategoryValue": -0.05721129,
"DifferenceValue": null
}
},
"SortinoRatio": {
"OneYear": {
"Value": 0.74786865,
"CategoryValue": 0,
"DifferenceValue": 0.74786865
},
"ThreeYear": {
"Value": -0.91756146,
"CategoryValue": 0,
"DifferenceValue": -0.91756146
},
"FiveYear": {
"Value": -0.60572345,
"CategoryValue": 0,
"DifferenceValue": -0.60572345
},
"TenYear": {
"Value": null,
"CategoryValue": 0,
"DifferenceValue": null
}
}
}
你的例子中的问题是 DATA['Ratings']['TenYear'] is None
fund_financial_dictionary['ratings_tenyear_pasardanarating'] = ('' if DATA['Ratings']['TenYear'] is None else DATA['Ratings']['TenYear'].get('PasardanaRating', ''))