为什么缩进的错误原因是错误的功能?

问题描述:

我不明白为什么会发生这种错误。 首先,我通过运行此代码写为什么缩进的错误原因是错误的功能?

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.But得到1个图像原本正确的代码可以从API.I获得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个图像。但我不明白为什么我可以通过修改缩进来做到这一点。请给我一些解释。

+2

因为它是Python ...? – dasdingonesin

因为在第一个例子,如果你的条件通过你只得到图像:

if not os.path.exists(path): 

这情况只会通过一次因为你马上创建路径:

os.makedirs(path) 

对于循环的每一次迭代,条件都是错误的。所以代码之内的条件块不执行。

基本上,仅当条件为真时才会执行if块。将if块的代码移出时,无论条件如何,它都会始终执行。