Я довольно новичок в Python. Я пытаюсь извлечь аналитическую информацию из API пакетов homebrew через модуль Запрос . Для этого я сначала динамически получаю URL-адреса для каждого пакета, а затем набираю oop над каждым URL-адресом, чтобы получить необходимую информацию. Сценарий работает хорошо, пока l oop не остановится над пакетом "carina". Я полагаю, что остановка вызвана тем, что путь package_json['analytics']['install']['30d'][package_name]
больше не является правильным в части [package_name]
( имя пакета в словаре аналитики становится "carina --HEAD" ).
На этот раз я бы хотел, чтобы l oop просто перешел к следующему пакету и распечатал сообщение об ошибке.
До сих пор я пытался решить ее, используя следующее:
try:
r = requests.get(package_url)
package_json = r.json()
exception:
pass
, но это не работает.
Может ли кто-нибудь помочь мне, пожалуйста?
Сценарий
r = requests.get("https://formulae.brew.sh/api/formula.json")
packages_json = r.json()
packages_string = json.dumps(packages_json, indent=2)
results = []
t1 = time.perf_counter()
for package in packages_json:
package_name = package["name"]
package_desc = package["desc"]
package_url = f'https://formulae.brew.sh/api/formula/{package_name}.json'
try:
r = requests.get(package_url)
package_json = r.json()
exception:
pass
installs_30 = package_json['analytics']['install']['30d'][package_name]
installs_90 = package_json['analytics']['install']['90d'][package_name]
installs_365 = package_json['analytics']['install']['365d'][package_name]
data = {
"nome": package_name,
"descrizione": package_desc,
"analytics": {
"30d": installs_30,
"90d": installs_90,
"365d": installs_365
}
}
results.append(data)
time.sleep(r.elapsed.total_seconds())
if r.status_code != 200:
print (f"Got error for {package_name}")
else:
print(f'Got {package_name} in {r.elapsed.total_seconds()} seconds')
t2 = time.perf_counter()
print(f"Finito in {t2-t1} secondi")
with open("packages_info.json", "w") as f:
json.dump(results, f, indent=2)
Сообщение об ошибке
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-3-42e0fb795383> in <module>
16
17
---> 18 installs_30 = package_json['analytics']['install']['30d'][package_name]
19 installs_90 = package_json['analytics']['install']['90d'][package_name]
20 installs_365 = package_json['analytics']['install']['365d'][package_name]
KeyError: 'carina'