2016-10-26 44 views
-7

我的python腳本被稱爲dlimage。我想結合一個if語句和一個for循環。在終端中,我希望能夠輸入python dlimage 1 2 3,它只下載1個圖像。否則,如果num3的變量是空的,並且我輸入python dlimage 1 2它將通過使用for循環for num3 in range(01,50):下載50個圖像。如何使if語句和for循環爲空變量工作

當我運行python dlimage 1 2錯誤:

Traceback (most recent call last): 
    File "dlimage.py", line 4, in <module> 
    if not num3: 
NameError: name 'num3' is undefined 

如何定義它,因爲NUM3已經在解析器和下面的網址?我也不完全確定我的代碼是正確的。這裏有什麼問題?

我的代碼:

import urllib 
import argparse 

if not num3: 
    for num3 in range(01,50): 

     def download_web_image(url): 
      IMAGE = url.rsplit('/',1)[1] 
      urllib.urlretrieve(url, IMAGE) 

     parser = argparse.ArgumentParser() 
     parser.add_argument("num1") 
     parser.add_argument("num2") 
     parser.add_argument("num3") 
     args = parser.parse_args() 

     download_web_image("https://www.example.com/{num1}/{num2}/{num3}.jpg".format(num1=args.num1, num2=args.num2, num3=args.num3)) 

else: 

    def download_web_image(url): 
     IMAGE = url.rsplit('/',1)[1] 
     urllib.urlretrieve(url, IMAGE) 

    parser = argparse.ArgumentParser() 
    parser.add_argument("num1") 
    parser.add_argument("num2") 
    parser.add_argument("num3") 
    args = parser.parse_args() 

    download_web_image("https://www.example.com/{num1}/{num2}/{num3}.jpg".format(num1=args.num1, num2=args.num2, num3=args.num3)) 

UPDATE:現在正在工作。感謝你的幫助。

+0

在這個程序中執行的第一行是'if not num3'。此時沒有定義「num3」。因此錯誤。我真的不確定你還在期待什麼。 – deceze

+0

將它的默認值設置爲某些內容,也許是'None'? –

+0

解析器塊解析器= argparse.ArgumentParser()'直到'args = parser.parse_args()'必須在調用'if not num3:'之前,我認爲,而不是num3它必須是'如果不是args.num3'。不應該嗎? –

回答

2

不應該是這樣的東西?

import urllib 
import argparse 

def download_web_image(url): 
    IMAGE = url.rsplit('/',1)[1] 
    urllib.urlretrieve(url, IMAGE) 

parser = argparse.ArgumentParser() 
parser.add_argument("num1") 
parser.add_argument("num2") 
parser.add_argument("num3") 
args = parser.parse_args() 

num3 = args.num3 

if not num3: 
    for num3 in range(01,50): 
     download_web_image("https://www.example.com/{num1}/{num2}/{num3}.jpg".format(num1=args.num1, num2=args.num2, num3=num3)) 
else: 
    download_web_image("https://www.example.com/{num1}/{num2}/{num3}.jpg".format(num1=args.num1, num2=args.num2, num3=num3)) 

您的完整代碼是(抱歉)一團糟..首先您必須在使用它們之前定義變量。 num3未在您的代碼中定義,但您使用if not num3:進行檢查。然後你使用num3作爲for循環中的變量 - 對我沒有任何意義

+0

對不起,昨天之前我對python一無所知(我知道,不是一個很好的藉口)。我基本上想製作一個我上面發佈的bash腳本的python版本。 –

+0

更新了我的代碼,**沒有**調試/測試。嘗試它,然後嘗試修復錯誤然後你自己:) –

+0

問題似乎是'錯誤:太少的參數'現在 –

2

首先,您在定義它之前使用的是num 3。 其次,每當你進入一個循環時,你正在重新定義一個函數,在你的else塊中,這看起來毫無意義(?) 你的for循環中的所有與else部分相同的東西應該在if語句,除了調用download_web_image