我试图使用以下代码将行添加到sheety项目的电子表格中:
import requests
import json
class FlightData:
def __init__(self):
self.api_id = "nMiV3AM7RZvMQGBC9d5r8qwkjikmIBzh"
self.api_secret = "KtUx9vmoOLYFiwEL"
self.token = " RpbiYmNrhmP04WHmcAUxCFISMRBC"
def get_token(self):
"To get Token when it is invalid"
endpoint = "https://test.api.amadeus.com/v1/security/oauth2/token"
parameter = {'grant_type': 'client_credentials', "client_id": self.api_id, "client_secret": self.api_secret}
header = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.post(url=endpoint, data=parameter, headers=header)
response_data = response.text
res = json.loads(response_data)
print(res)
self.token = res['access_token']
def get_iata_code(self):
endpoint = "https://test.api.amadeus.com/v1/reference-data/locations/cities"
parameter = {"keyword": "PAR", 'max': 10}
header = {"Authorization": f"Bearer {self.token}"}
response = requests.get(url=endpoint, params=parameter, headers=header)
data = json.loads(response.text)
data1 = []
for i in range(0, len(data['data'])):
name = data["data"][i]["name"]
state_code = data["data"][i]["address"]["stateCode"]
dict1 = {"name": name, "stateCode": state_code}
data1.append(dict1)
return data1
def iata_code_adder(info):
list1 = info
endpoint = "https://api.sheety.co/fd65cc87954706f35e0debbd37a8d429/flightDeals/prices"
print(type(info))
for i in range(len(list1)):
body = {"price": {"name": list1[i]["name"], "stateCode": list1[i]["stateCode"]}}
response = requests.post(url=endpoint, json=body)
print(response.text)
fd = FlightData()
data = fd.get_iata_code()
iata_code_adder(data)
上面的代码给了我一个错误。这是什么意思,我该如何解决它?
"errors": [
{
"detail": "Cannot read property '0' of undefined"
}]
我本来希望添加包含州名称和州代码的行,但我不断收到此错误“无法读取未定义的属性‘0’”
错误信息“Cannot read property '0' of undefined”表示正在尝试访问未定义变量的索引 0。在的代码中,问题出在
iata_code_adder
函数中,具体来说是在这一行:
body = {"price": {"name": list1[i]["name"], "stateCode": list1[i]["stateCode"]}}
出现这个错误的原因是正在访问
list1[i]
,但是的 API 响应中可能没有
data
字段,或者
data
字段是一个空列表。因此,当尝试访问
list1[i]["name"]
和
list1[i]["stateCode"]
时,就会出现错误,因为它无法读取
undefined
的属性 '0'。
为了解决这个问题,需要检查的 API 响应,确保它包含
data
字段,并且该字段是一个非空列表。可以通过打印
data
变量的值来检查这一点。
以下是修改后的代码:
import requests
import json
class FlightData:
def __init__(self):
self.api_id = "nMiV3AM7RZvMQGBC9d5r8qwkjikmIBzh"
self.api_secret = "KtUx9vmoOLYFiwEL"
self.token = "RpbiYmNrhmP04WHmcAUxCFISMRBC"
def get_token(self):
"To get Token when it is invalid"
endpoint = "https://test.api.amadeus.com/v1/security/oauth2/token"
parameter = {
'grant_type': 'client_credentials',
"client_id": self.api_id,
"client_secret": self.api_secret
}
header = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.post(url=endpoint, data=parameter, headers=header)
response_data = response.text
res = json.loads(response_data)
print(res)
self.token = res['access_token']
def get_iata_code(self):
endpoint = "https://test.api.amadeus.com/v1/reference-data/locations/cities"
parameter = {"keyword": "PAR", 'max': 10}
header = {"Authorization": f"Bearer {self.token}"}
response = requests.get(url=endpoint, params=parameter, headers=header)
data = json.loads(response.text)
# 检查 data 是否存在并且是非空列表
if 'data' in data and data['data']:
data1 = []
for i in range(0, len(data['data'])):
name = data["data"][i]["name"]
state_code = data["data"][i]["address"]["stateCode"]
dict1 = {"name": name, "stateCode": state_code}
data1.append(dict1)
return data1
else:
print("API 响应中没有 data 字段,或者 data 字段为空列表")
return []
def iata_code_adder(info):
list1 = info
endpoint = "https://api.sheety.co/fd65cc87954706f35e0debbd37a8d429/flightDeals/prices"
print(type(info))
for item in list1:
body = {"price": {"name": item["name"], "stateCode": item["stateCode"]}}
response = requests.post(url=endpoint, json=body)
print(response.text)
fd = FlightData()
data = fd.get_iata_code()
iata_code_adder(data)
在这个修改后的代码中,我们在
get_iata_code
函数中添加了一个检查,以确保
data
字段存在并且是一个非空列表。如果
data
字段不存在或者为空列表,则打印一条错误消息并返回一个空列表。这将防止在
iata_code_adder
函数中出现“Cannot read property '0' of undefined”错误。