关于sys.argv(python)

时间:2015-07-06 16:42:50

标签: python

很抱歉提出一个基本问题,但很难在谷歌上找到。 无论如何,我有一个程序,可以从各种.txt文件中找到的数字进行数学计算。我想添加的一件事是一个-show参数,用于逐步显示数学(在数学中查找错误,从certian步骤中查找数字等)。 我把它设置在代码中就像这样:

import sys
sys.argv[0]
filename = sys.argv[1]
prop = sys.argv[2]
show = sys.argv[3]
    if show == "-show":
        show = 1

(show = 1稍后会做一些事情)。我的问题是当我没有为sys.argv [3]提供任何东西时,如果我放了:

python program.py examplefile.txt exampleline 
然后程序没有运行,我知道这是因为它期待一个参数,这就是为什么它搞乱了,但有没有办法告诉它sys.argv [3]并不总是使用和可以是空白的吗?

3 个答案:

答案 0 :(得分:1)

你可以检查sys.argv的长度,但为什么要这么麻烦?使用try / catch:

try: flag = sys.argv[1]
except: flag = False

那样变量flag总是有一个值,你可以编写知道它总是有值的代码。代码的行数少于if / else测试。这是一场全胜利。

答案 1 :(得分:1)

另一方面,从文档中检查python中的this模块可能会很好 -

  

argparse模块可以轻松编写用户友好的命令行界面。程序定义了它需要的参数,argparse将弄清楚如何解析sys.argv中的参数。当用户给程序提供无效参数时,argparse模块还会自动生成帮助和使用消息并发出错误。

它还支持可选参数。也许你可以看一下{{3}}来开始这个。

答案 2 :(得分:0)

在没有第三个参数的情况下运行它时,您应该在该行上获得IndexError。如果您没有收到IndexError,那么其他错误就应该修复它。如果你是,一切都很好 - 你只需要检查sys.argv的长度,在你的代码中考虑当该值为3或4时会发生什么:

if len(sys.argv) == 3:
  # Stuff without sys.argv[3]
if len(sys.argv) == 4:
  # Stuff with sys.argv[3]