我的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))
更新:现在正在运作。感谢你的帮助。
答案 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