sys.argv 取值时如何为 python 中的函数设置可选参数

How to set an optional argument for function in python when taking value by sys.argv

我正在编写一个程序来从用户那里获取 3 个参数。 前两个参数为整型,第三个参数为字符串,可选。

我知道 None 用作可选参数的空默认值, 所以我尝试了以下方法:

def main(w, l, s=None):
    variable_1 = w
    variable_2 = l
    variable_3 = s
...
...

main(int(sys.argv[1]), int(sys.argv[2]), sys.argv[3])

但是,如果我没有输入第三个值,则会出现以下错误。

IndexError: list index out of range

我相信这是因为对可选参数的检查晚于系统发现 sys.argv 数组长度不够长的时间。 那么,在这种情况下,我应该如何使用 None 作为默认值以正确的方式设置可选参数? 感谢阅读我的问题。

您必须假设没有给出第三个参数的可能性。我可能会这样做:

def main(argument):
    variable_1 = int(argument[0])
    variable_2 = int(argument[1])
    variable_3 = argument[2] if len(argument)>1 else None
...
...

main(sys.argv)

你得到 IndexError: list index out of range 因为它试图从 sys.argv 中获取第三个参数。但是,如果您不提供第三个参数,它会尝试将第三个参数传递给不存在的函数。要解决此问题,您可以这样做 -

def main(w, l, s = None):
    variable_1 = w
    variable_2 = l
    variable_3 = s
...
...

if len(sys.argv) == 3:
    main(int(sys.argv[1]), int(sys.argv[2]), sys.argv[3])
else:
    main(int(sys.argv[1]), int(sys.argv[2]), None)

如果参数存在,这将只接受参数,否则它会将 None 分配给 variable_3