2016-10-26 14 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を実行エラー:NUM3がパーサと、以下のURLに既にあるので、

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

がどのように私は、それを定義していますか?また、私のコードが正しいことは完全にはわかりません。ここで何が問題なの?

マイコード:

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

このプログラムで実行される最初の行は 'not num3'です。 'num3'はこの時点では定義されていません。したがって、エラー。私は本当にあなたがここで何を期待しているか分からない。 – deceze

+0

デフォルト値は何か、おそらく 'None'と設定されていますか? –

+0

あなたのパーサブロック 'parser = argparse.ArgumentParser()'は 'args = parser.parse_args()'が '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:でチェックしてください。そして、あなたはforループのvariabeとしてnum3を使用します。意味がありません。

+0

申し訳ありませんが、私は昨日の前にpythonについて何も知らない(私は良い言い訳ではない)。私は基本的に上記のbashスクリプトのpython版を作りたいと思っています。 –

+0

**はデバッグ/テストなしで**私のコードを更新しました。それを試みて自分自身でエラーを修正しようとしてください:) –

+0

問題は 'エラー:あまりにも少ない引数'と思われます。 –

2

まず、num 3を使用して定義しています。 第2に、ループに入るたびに関数を再定義しています。無意味な(?) forループにあるものはすべてelse部分と同じですif文(download_web_imageの呼び出しを除く)

関連する問題