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', ''))