繁体   English   中英

如果条件不满足如何迭代循环

[英]How to iterate the loop if the condition is not met

我正在尝试获取相应电影名称的 ID,因为我需要检查 url 是否正常工作。 如果没有,那么我需要 append 空列表中的电影名称

data = {'id': [nan, nan, nan,nan],
            'movie_name': ['captain-fantastic', 'passengers', 'transformers','guardians-of-the-galaxy-vol-2']}


data2 = {'id': [nan, nan, nan,nan],
        'movie_name': ['captain-fantastic', 'passengers', 'transformers','guardians-of-the-galaxy-vol.2']}

dfa = pd.DataFrame(data)
dfa2 = pd.DataFrame(data2)

from turtle import clear
from urllib.request import Request, urlopen
import pandas as pd
import urllib.request as ur, json

movie_buff_uuid= []

for i in dfa["movie_name"]:
    url = ur.urlopen("https://www.moviebuff.com/"+str(i)+".json")
    d = json.loads(url.read())['uuid']
    movie_buff_uuid.append(d)    

打印(movie_buff_uuid)

如果我在上述循环中传递了 data2,则会收到此错误 urllib.error.HTTPError: HTTP 错误 404: Not Found 以克服此错误。 我试过这个

movie_buff_uuid= []

for i in dfa["movie_name"]:
    url = ur.urlopen("https://www.moviebuff.com/"+str(i)+".json")
    if url.getcode() == 404:
       d = json.loads(url.read())['uuid']
    else:
        d = i

movie_buff_uuid.append(d)
     
print(movie_buff_uuid)

预期 output:

['f8379c86-1307-4b22-b175-5000284ef6b9', '8f0c611a-4356-454d-a6d6-aac437519540', '7cd2dffa-cb31-4897-a7b0-30dcaee66104', 'guardians-of-the-galaxy-vol.2']

任何想法将不胜感激

正如 dominik-air 所说,当文件不存在时,您会收到 404 响应。 然而,Python 的内置urllib在收到此错误时会引发错误(例如,与非常流行的requests库不同)。

在 Python 中,我们通常使用 try/catch 流来处理这个问题( EAFP )。

把它们放在一起:

import json
from time import sleep
from urllib.error import HTTPError
from urllib.request import urlopen

movie_buff_uuid = []
movies = ['captain-fantastic', 'passengers', 'transformers','guardians-of-the-galaxy-vol-2']

for movie in movies:
    try:
        url = urlopen(f"https://www.moviebuff.com/{movie}.json")
        uuid = json.loads(url.read())['uuid']
        movie_buff_uuid.append(uuid)
    except HTTPError:
        movie_buff_uuid.append(movie)
    sleep(5)  # let's avoid hitting the server too heavily

(您也不需要第一部分中的数据框:))

要检查给定的 url 是否有效,您可以阅读请求的状态代码。 404 HTTP 状态代码表示该站点不存在。 您的变量集的示例用法:

for i in dfa['movie_name']:
    url = ur.urlopen("https://www.moviebuff.com/"+str(i)+".json")
    if url.getcode() == 404:
        # insert code you want to run here

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM