【问题标题】:Check if sys.argv are defined inside a function检查 sys.argv 是否在函数内部定义
【发布时间】:2016-09-28 02:22:27
【问题描述】:

我想定义一个函数来检查是否有任何 argv 被提供给命令行,否则会打印一个字符串或返回两个字符串。代码如下:

import sys

def get_input():
    if len(sys.argv) > 1:
        path_input_text = sys.argv[1]
        path_basic_conf = sys.argv[2]
        return path_input_text, path_basic_conf
    elif len(sys.argv) == 1:
        print "Takes at least two arguments"
    else:
        print "No arguments entered"
        return 'file.txt', 'file.xml'

我尝试这样调用函数:

a,b = get_input()

当我给出两个参数时它会起作用,但在其他两种情况下它会失败,即 elif 和 else 语句。我怎样才能让它工作?我应该使用 try/except 语句吗?谢谢

编辑 1

当我只尝试 1 个参数时:

IndexError: list index out of range

当我尝试不带参数时:

TypeError: 'NoneType' object is not iterable

在给定 1 个参数的情况下,我想提出一个错误,而不是返回 None,None。

【问题讨论】:

  • 如果您想这样做,您的函数必须总是返回两件事,否则会引发错误。也许只是return sys.argv[0], None?或者,如果程序无法继续使用一个参数,请引发错误而不是打印它。
  • 定义fails。它有什么作用?
  • 使用模块argparse

标签: python function argv


【解决方案1】:

在一种情况下你什么都不返回,你应该返回一些东西: 例如没有。

elif len(sys.argv) ==1:
    print "Takes at least two arguments"

应该是:

elif len(sys.argv) ==1:
    print "Takes at least two arguments"
    return None,None

你的长度应该从 2 开始,而不是 1

if len(sys.argv) > 2:

【讨论】:

    【解决方案2】:

    argv[0] 是脚本名称(取决于操作系统是否为完整路径名)。如果该命令是使用解释器的 -c 命令行选项执行的,则 argv[0] 设置为字符串“-c”。如果没有将脚本名称传递给 Python 解释器,则 argv[0] 是空字符串。 (参考:https://docs.python.org/2/library/sys.html

    试试这个:

    import sys
    def get_input():
        if len(sys.argv) > 2:
            #print (sys.argv[0])
            path_input_text = sys.argv[1]
            path_basic_conf = sys.argv[2]
            return path_input_text, path_basic_conf
        elif len(sys.argv) ==2:
            #print (sys.argv[0])
            print ("Takes at least two arguments")
            return None,None
        else:
            #print (sys.argv[0])
            print ("No arguments entered")
            return 'file.txt', 'file.xml'
    
    a,b = get_input()
    print (a)
    print (b)
    

    输出:

    D:\>python so.py 1
    Takes at least two arguments
    None
    None
    
    D:\>python so.py
    No arguments entered
    file.txt
    file.xml
    
    D:\>python so.py 1 2
    1
    2
    

    【讨论】:

    • 我实际上写了相同的脚本,它工作正常。我用 elif 语句编写了它,该语句引发了 IndexError 而不是 None, None
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多