如何使if语句和for循环适用于空变量

时间:2016-10-26 12:16:22

标签: python if-statement for-loop undefined

我的python脚本名为dlimage。我想结合一个if语句和一个for循环。在终端中,我希望能够键入python dlimage 1 2 3,它只会下载1张图像。否则,如果num3的变量为空并且我键入python dlimage 1 2,它将使用for循环for num3 in range(01,50):下载50个图像。

运行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已经在解析器和url下面了?我也不完全确定我的代码是否正确。这有什么问题?

我的代码:

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))

更新:现在正在运作。感谢你的帮助。

2 个答案:

答案 0 :(得分: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循环中的变量 - 对我没有任何意义

答案 1 :(得分:2)

首先,在定义它之前使用num 3。 其次,每次进入循环时,你都在重新定义一个函数,而在你的else块中,这看起来毫无意义(?) 你的for循环中与else部分相同的所有东西都应该在if语句之前,除了调用download_web_image