当值存在蟒蛇

问题描述:

的Python nonetype错误所以我的JSON数据看起来像下面。我的代码行:print(jsonData["orderData"]["txnType"])打印出来的字SALE然后我得到一个错误说TypeError: 'NoneType' object is not subscriptable 随着我的理解为什么我得到这个错误,如果值是明显存在并打印?当值存在蟒蛇

{ 
    'orderData':{ 
     'date':'2017-08-29T12:55:19-07:00', 
     'receipt':'A2ZC5N96', 
     'promo':{ 
     '@nil':'true' 
     }, 
     'pmtType':'PYPL', 
     'txnType':'SALE', 
     'item':'37', 
     'amount':'104.28', 
     'site':'PASSIOPROD', 
     'affi':'BCPATRON2', 
     'country':'US', 
     'state':'OH', 
     'lastName':{ 
     '@nil':'true' 
     }, 
     'firstName':{ 
     '@nil':'true' 
     }, 
     'currency':'USD', 
     'email':{ 
     '@nil':'true' 
     }, 
     'zip':'43206', 
     'rebillAmount':'97.00', 
     'processedPayments':'1', 
     'futurePayments':'998', 
     'nextPaymentDate':'2017-09-29T12:55:19-07:00', 
     'status':'ACTIVE', 
     'accountAmount':'44.09', 
     'role':'AFFILIATE', 
     'customerDisplayName':{ 
     '@nil':'true' 
     }, 
     'title':'aaa', 
     'recurring':'true', 
     'physical':'false', 
     'customerRefundableState':'REFUNDABLE' 
    } 
} 

全码:

devKeys = ["KEUYS"] 
apiKeys = ["API"] 
sales = [] 
refunds = [] 
totalSales = [] 
x = 0 

while x < len(devKeys): 
y = 0 
indSale = 0 
indRefund = 0 
indTotal = 0 
totalTransactions = 0 

payload = devKeys[x]+":"+apiKeys[x] 
headers = {"Accept": "application/json", "Authorization": payload} 
r = requests.get('https://api.clickbank.com/rest/1.3/orders/list', headers=headers) 
jsonData = json.loads(r.text) 
text = r.text 
if ":[" not in text: #This line is here because the JSON looks different if theres only one entry 
    print(jsonData["orderData"]["txnType"]) 
    if jsonData["orderData"]["txnType"] == "SALE": 
     indSale+=44 
     indTotal+=1 
    else: 
     indRefund+=44 
else: 
    totalTransactions = len(jsonData["orderData"]) 
    while y < totalTransactions: 

     if jsonData["orderData"][y]["txnType"] == "SALE": 
      indSale+=44 
      indTotal+=1 
     else: 
      indRefund+=44 
     y+=1 

sales.append(indSale) 
refunds.append(indRefund) 
totalSales.append(indTotal) 
x+=1 
+0

它看起来像你正在运行这一个循环,你的结构是这样orderDatas的列表。没有更多的上下文,不能说太多。 –

+1

向我们展示产生错误的实际完整代码。只是你显示的一行没有任何错误。 – jwodder

+0

只是添加了完整的代码 – Sagar

与您的数据,我可以打印出正确的值不会有问题,这意味着该数据是有效的。因此,请仔细检查并验证“jsonData”对象是否为“sub-scriptable”并具有markdown中引用的“orderData”键。看起来你可能没有得到预期的JSON响应。

也指为子编写脚本:In Python, what does it mean if an object is subscriptable or not?

希望它能帮助。

+0

只注意到你引用了[y],但在json中没有jsonData [“orderData”]下的对象列表,所以这不起作用。 – Leo