为什么缩进错误会导致错误的功能?

时间:2017-04-06 13:51:04

标签: python-3.x tensorflow

我无法理解为什么会发生这种错误。 首先,我写了

import urllib.request
from bs4 import BeautifulSoup
import time
import os

def download_image(url,name):
    path = "./scrape_image/"
    imagename = str(name) + ".jpg"

    if not os.path.exists(path):
        os.makedirs(path)

        print(path)
        urllib.request.urlretrieve(url,path+imagename)


url = "https://api.XXXkeyword=YYY&limit=1000"
response = urllib.request.urlopen(url)
rss = response.read().decode("utf-8")

soup = BeautifulSoup(rss, "xml")

name=0
for s in soup.find_all("photo"):
    url = s.find_all("image_url")[0].string
    name+=1
    download_image(url, name)

通过运行此代码,我可以从API获得1张图片。但是最初正确的代码可以从API获得1000张图片。我在第一段代码中修复了缩进,所以我的代码就像

import urllib.request
from bs4 import BeautifulSoup
import time
import os

def download_image(url,name):
    path = "./image/"
    imagename = str(name) + ".jpg"

    if not os.path.exists(path):
        os.makedirs(path)

    print(path)
    urllib.request.urlretrieve(url, path+imagename)
    time.sleep(1) 


url = "https://api.XXXkeyword=YYY&limit=1000"
response = urllib.request.urlopen(url)
rss = response.read().decode("utf-8")

soup = BeautifulSoup(rss, "xml")

name = 0
for s in soup.find_all("photo"):
    url = s.find_all("image_url")[0].string
    name+=1
    download_image(url,name)

最后,我可以从API获得1000张图片。但我无法理解为什么我可以通过修复缩进来这样做。请给我一些解释。

1 个答案:

答案 0 :(得分:0)

因为在第一个示例中,只有在条件通过时才会获得图像:

if not os.path.exists(path):

该条件只会传递一次,因为您会立即创建路径:

os.makedirs(path)

对于循环的每个其他迭代,条件为false。因此,条件块中的代码不会执行。

基本上,只有条件为真时才会执行if块。当您移动if块的代码 out 时,无论条件如何,它总是会执行。