Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在需要参数时运行不带参数的Python代码_Python_Shell_Terminal_Arguments - Fatal编程技术网

在需要参数时运行不带参数的Python代码

在需要参数时运行不带参数的Python代码,python,shell,terminal,arguments,Python,Shell,Terminal,Arguments,我正在尝试编写一个python代码,该代码将在shell中执行,参数如下: python programName.py arg1 arg2 我必须编写代码,这样如果没有传递参数,它将默认为代码中声明的默认值。我尝试使用类似的方法来实现这一点: # ... Imports such as sys x = argv[0] y = argv[1] # ... Other Code def main(): if x is None: x = 0 if y is None: y = 12

我正在尝试编写一个python代码,该代码将在shell中执行,参数如下:

python programName.py arg1 arg2
我必须编写代码,这样如果没有传递参数,它将默认为代码中声明的默认值。我尝试使用类似的方法来实现这一点:

# ... Imports such as sys
x = argv[0]
y = argv[1]
#  ... Other Code

def main():
 if x is None:
  x = 0
 if y is None:
  y = 12
# ... Other Code
但是Python不喜欢我这样做,当没有参数传递时,它会抛出一个错误

很抱歉,我无法显示错误,因为该程序位于我的另一台计算机上,我不在。正确的方法是什么?

试试这个:

import sys

# ... Imports such as sys
x = sys.argv[1] if len(sys.argv) > 1 else None  # None is the default value
y = sys.argv[2] if len(sys.argv) > 2 else None  # None is the default value
#  ... Other Code
sys.argv[0]
->给出程序文件名


在上面的问题中,您正在运行
python程序文件\u name x y
,在本例中
sys.argv[0]
为您提供
程序文件\u name

您应该检查
argv
的长度:

if len(argv) < 2:
    x = 0
if len(argv) < 3:
    y = 12
如果len(argv)<2:
x=0
如果len(argv)<3:
y=12

执行以下操作如何。您需要检查参数列表的长度以确定传递的参数数

import sys

x = None
y = None

if len(sys.argv) > 3:
   print("Usage: ....")
   sys.exit(1)

if len(sys.argv) > 1:
   x = sys.argv[1]

if len(sys.argv) > 2:
   y = sys.argv[2]

没有
indexer
UnboundLocalError
?在上面的问题中,他正在运行python程序\u file\u name x y,在本例中,sys.argv[0]为您提供程序\u file\u name,我的意思是似乎希望检查是否没有
arg2
,然后将
y
设置为
12
。但是如果真的没有
arg2
,那么
y=sys.argv[2]
将产生一个
indexer
。函数将在这里产生一个
UnboundLocalError
,因为
x
y
在这里是一个全局变量,但您没有使用
global x,y
。他可以根据自己的需要修改逻辑部分,实际问题在于他访问参数的方式,这在上面的回答中得到了纠正。我觉得这样做会给自己带来更多的麻烦,为什么不系统地检查并建立x和y值,例如,你有if len(sys.argv)==2:x=sys.argv[1]如果len(sys.argv)==3:y=sys.argv[2]。。。。etcIt并不完全符合您的要求,但我认为argparse是处理Python参数的最佳方法: