【问题标题】:how to make If statement and for loop work for an empty variable如何使 If 语句和 for 循环适用于空变量
【发布时间】:2017-03-08 19:21:44
【问题描述】:

我的 python 脚本名为dlimage。我想结合一个 if 语句和一个 for 循环。在终端中,我希望能够输入python dlimage 1 2 3,它只会下载一张图片。否则,如果 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))

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

【问题讨论】:

  • 在这个程序中执行的第一行是if not num3num3 此时未定义。因此错误。我真的不确定您还期待什么。
  • 将它的默认值设置为某种东西,也许是None?
  • 您的解析器块parser = argparse.ArgumentParser() 直到args = parser.parse_args() 必须在调用if not num3: 之前,我认为,它必须是if not args.num3 之类的东西,而不是num3。不应该吗?

标签: python if-statement for-loop undefined


【解决方案1】:

不应该是这样的吗?

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 循环中使用 num3 作为变量 - 对我来说没有任何意义

【讨论】:

  • 对不起,我在昨天之前对python一无所知(我知道,不是一个好的借口)。我基本上想制作我上面发布的 bash 脚本的 python 版本。
  • 更新了我的代码,没有调试/测试。尝试并尝试修复错误然后自己:)
  • 现在问题好像是error: too few arguments
  • 这个异常来自argparse?试试parser.add_argument('num3', nargs='?', default=None)(而不是parser.add_argument("num3")
  • @JohnP。 - 如果您使用该语言不到一天,您应该阅读教程和指南,而不是发布问题。您所面临的挑战可以通过最少的独立研究来解决。这相当于问一个读书俱乐部,一本书的结局是什么,因为你根本还没有读完。
【解决方案2】:

首先,您在定义之前使用了 num 3。 其次,每次进入循环时,您都在重新定义一个函数,并且在您的 else 块中,这似乎毫无意义(?) for 循环中与 else 部分相同的所有内容都应该在 if 语句之前,除了对 download_web_image 的调用

【讨论】:

    猜你喜欢
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多