KeyError: 'rates' - Json from fixer.io - Python
KeyError: 'rates' - Json from fixer.io - Python
我有这个代码:
def getExchangeRates():
rates = []
response = urlopen('my_key')
data = response.read()
rdata = json.loads(data.decode(), parse_float=float)
rates.append( rdata['rates']['USD'] )
rates.append( rdata['rates']['GBP'] )
rates.append( rdata['rates']['HKD'] )
rates.append( rdata['rates']['AUD'] )
return rates
这段代码可以正常工作,但现在出现以下错误:
Traceback (most recent call last):
File "/home/kristian/.virtualenvs/usio_flask/lib/python3.4/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/home/kristian/.virtualenvs/usio_flask/lib/python3.4/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/kristian/.virtualenvs/usio_flask/lib/python3.4/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/kristian/.virtualenvs/usio_flask/lib/python3.4/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/kristian/.virtualenvs/usio_flask/lib/python3.4/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/home/kristian/.virtualenvs/usio_flask/lib/python3.4/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "app/app.py", line 30, in index
rates = getExchangeRates()
File "app/app.py", line 22, in getExchangeRates
rates.append( rdata['rates']['USD'] )
KeyError: 'rates'
奇怪的是,rates
正在此处初始化:
rates = []
有什么想法吗?
KeyError
是因为 rates
不是 rdata 中的键。在 dict 上查找键时,捕获 KeyError
或使用 get
始终是个好主意,这样可以在找不到键的情况下提供默认值。下面的代码说明了这两种方法:
rates_from_rdata = rdata.get('rates', {})
for rate_symbol in ['USD', 'GBP', 'HKD', 'AUD']:
try:
rates.append(rates_from_rdata[rate_symbol])
except KeyError:
print ('rate for {} not found in rdata'.format(rate_symbol))
pass
进行如下操作
res = requests.get("http://data.fixer.io/api/latest?access_key=0cf7e4582cfe4e7de960de93c6c4bf9a")
data=res.json()
print(data)
如果它在单引号中的字典中有比率,则使用单引号(你在做什么),否则如果 "rates" 在双引号中,则在附加时使用双引号。另外,检查您的订阅计划是否免费它不支持美元。
我有这个代码:
def getExchangeRates():
rates = []
response = urlopen('my_key')
data = response.read()
rdata = json.loads(data.decode(), parse_float=float)
rates.append( rdata['rates']['USD'] )
rates.append( rdata['rates']['GBP'] )
rates.append( rdata['rates']['HKD'] )
rates.append( rdata['rates']['AUD'] )
return rates
这段代码可以正常工作,但现在出现以下错误:
Traceback (most recent call last):
File "/home/kristian/.virtualenvs/usio_flask/lib/python3.4/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/home/kristian/.virtualenvs/usio_flask/lib/python3.4/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/kristian/.virtualenvs/usio_flask/lib/python3.4/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/kristian/.virtualenvs/usio_flask/lib/python3.4/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/kristian/.virtualenvs/usio_flask/lib/python3.4/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/home/kristian/.virtualenvs/usio_flask/lib/python3.4/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "app/app.py", line 30, in index
rates = getExchangeRates()
File "app/app.py", line 22, in getExchangeRates
rates.append( rdata['rates']['USD'] )
KeyError: 'rates'
奇怪的是,rates
正在此处初始化:
rates = []
有什么想法吗?
KeyError
是因为 rates
不是 rdata 中的键。在 dict 上查找键时,捕获 KeyError
或使用 get
始终是个好主意,这样可以在找不到键的情况下提供默认值。下面的代码说明了这两种方法:
rates_from_rdata = rdata.get('rates', {})
for rate_symbol in ['USD', 'GBP', 'HKD', 'AUD']:
try:
rates.append(rates_from_rdata[rate_symbol])
except KeyError:
print ('rate for {} not found in rdata'.format(rate_symbol))
pass
进行如下操作
res = requests.get("http://data.fixer.io/api/latest?access_key=0cf7e4582cfe4e7de960de93c6c4bf9a")
data=res.json()
print(data)
如果它在单引号中的字典中有比率,则使用单引号(你在做什么),否则如果 "rates" 在双引号中,则在附加时使用双引号。另外,检查您的订阅计划是否免费它不支持美元。