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
。
我正在编写一个程序来从用户那里获取 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
。