所以,我试图抓住"rate_float"
,但每当运行响应时,我都会得到 TypeError。
我很确定我的 TypeError 实际上是在尝试循环时立即发生的"bpi"
我最初认为这是因为包含在一个字符串中,但它是一个浮点数,这仍然是导致问题的原因,还是我没有正确解析 json 以获取"USD"
,并获取值对"rate_float"
正确的代码应该只输出 USD 的 rate_float。
错误信息:
Traceback (most recent call last):
File "C:\Users\Blue\python_practice\problem_sets\Bitcoin_Price", line 37, in <module>
main()
File "C:\Users\Blue\python_practice\problem_sets\Bitcoin_Price", line 7, in main
bitcoin_price = bitcoin()
File "C:\Users\Blue\python_practice\problem_sets\Bitcoin_Price", line 34, in bitcoin
print(p["rate_float"])
TypeError: string indices must be integers
全套代码:
import requests
import json
import sys
def main():
bitcoin_price = bitcoin()
print(bitcoin_price)
try:
if float(args()):
print(args())
return True
except ValueError:
print("Invalid Amount / Not a float or digit")
sys.exit()
def args():
arg = [float(x) for x in sys.argv[1:]]
user_arg = arg.pop(0)
return user_arg
def bitcoin():
response = requests.get(
"https://api.coindesk.com/v1/bpi/currentprice.json")
print(json.dumps(response.json(), indent=2))
usd_price = response.json()
for p in usd_price["bpi"]:
print(p["rate_float"])
main()
json:
{
"time": {
"updated": "Jun 12, 2022 23:29:00 UTC",
"updatedISO": "2022-06-12T23:29:00+00:00",
"updateduk": "Jun 13, 2022 at 00:29 BST"
},
"disclaimer": "This data was produced from the CoinDesk Bitcoin Price Index (USD). Non-USD currency data converted using hourly conversion rate from openexchangerates.org",
"chartName": "Bitcoin",
"bpi": {
"USD": {
"code": "USD",
"symbol": "$",
"rate": "27,091.6395",
"description": "United States Dollar",
"rate_float": 27091.6395
},
"GBP": {
"code": "GBP",
"symbol": "£",
"rate": "21,996.2168",
"description": "British Pound Sterling",
"rate_float": 21996.2168
},
"EUR": {
"code": "EUR",
"symbol": "€",
"rate": "25,752.4997",
"description": "Euro",
"rate_float": 25752.4997
}
}
}
问题就在这里
for p in usd_price["bpi"]:
print(p["rate_float"])
当您遍历字典时,您会遍历它的键。这样,p
是一个字符串(例如USD
,GBP
等)。
考虑使用以下方法迭代键和值items()
:
for currency, val in usd_price["bpi"].items():
print(currency, val["rate_float"])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句