<p>其他答案可能不完整。虽然将<code>exception</code>更改为<code>except</code>确实可以解决其中一个错误,但您的问题特别询问了检查路径<code>package_json['analytics']['install']['30d'][package_name]</code>并在出现关键错误时转到下一个包。要做到这一点,您需要将<code>try/except</code>调用包装在这些特定的代码行中。以下是一个例子:</p>
<pre><code>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()
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')
except:
pass
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)
</code></pre>