Python:对可能存在或不存在的参数使用if语句

Python:对可能存在或不存在的参数使用if语句,python,if-statement,argv,Python,If Statement,Argv,我一直在尝试制作一个小脚本(顺便说一句,我是Python的新手),它将返回给定单词的拼字分数(argv[1]),并在我不给的情况下提示我键入一个单词。在处理了if语句和许多索引错误之后,我决定: try: do something with sys.argv[1] except IndexError: print 'Type an argument' 但它并没有我想要的那么优雅。它基本上只是说“如果你遇到这种错误,请打印这个:”对吗?我一直在尝试类似于: if argv[1]

我一直在尝试制作一个小脚本(顺便说一句,我是Python的新手),它将返回给定单词的拼字分数(argv[1]),并在我不给的情况下提示我键入一个单词。在处理了if语句和许多索引错误之后,我决定:

try:
    do something with sys.argv[1]
except IndexError:
    print 'Type an argument'
但它并没有我想要的那么优雅。它基本上只是说“如果你遇到这种错误,请打印这个:”对吗?我一直在尝试类似于:

if argv[1] >= 1:
    do something with sys.argv[1]
else:
    print 'Type an argument'
但是我一直在if部分得到一个索引错误,我想我发现是因为如果argv[1]小于1,就没有参数,这意味着
argv[1]
不存在。我在正确的页面上吗?我想说“如果没有给出参数,打印这个:”这可能吗

这是我正在使用的实际代码

from sys import argv
from string import maketrans

i = 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z'
o = '0' '2' '2' '1' '0' '3' '1' '3' '0' '7' '4' '0' '2' '0' '0' '2' '9' '0' '0' '0' '0' '3' '3' '7' '3' '9' '0' '2' '2' '1' '0' '3' '1' '3' '0' '7' '4' '0' '2' '0' '0' '2' '9' '0' '0' '0' '0' '3' '3' '7' '3' '9'
t = maketrans(i, o)

def main():
  try:
   print sum(int(x) for x in argv[1].translate(t)) + len(argv[1])
  except IndexError:
   print 'Type a word, you shmuck'

if __name__ == '__main__':
  main()

Python哲学的一部分是“请求原谅比请求允许更好”-由于这是一个错误案例,因此对
try
没有任何伤害,除了
。也就是说,如果您想避免它,您可以只检查参数的数量:

def main():
    if len(argv) < 2:
        print "We need at least one argument"
        return
    # Remainder of implementation goes here
def main():
如果len(argv)<2:
打印“我们至少需要一个参数”
返回
#实现的其余部分在这里

编写这样的字符串很奇怪:你没有列出一个列表;Python只是将连续的字符串文本串联起来。这与
i='abcdefg…xyz'
相同。对于这一点,只需使用
from string import ascii_letters
并使用它,而不是
i
。如果你使用的是Python 2.7或3.x,请检查一下。它是一个从我玩maketrans函数时起的延迟。它不想将一个字符的字母转换为两位数(z和q值十分)。我认为将它们分开可能会有所帮助。没有,但我忘记了将其更改回。因此,如果我将“len(argv)”改为“len(argv[x]”,那么,它指定了参数的数量,而不是用作参数的字符串的长度?好的,所以我刚刚尝试了您的实现,但仍然得到相同的索引错误。如果len(argv)<1:print“键入一个单词,您就可以使用shmuck”否则:如果argv[1]=“-w”:在argv[2]中打印和(int(x)表示x)。translate(w))+len(argv[2])否则:在argv[1]中为x打印sum(int(x)。translate(s))+len(argv[1])@DanielForsyth-您需要确保
len(argv)<2
,而不是
<1
,因为总会有一个参数(被调用的脚本的名称)。这很有效!非常感谢。它们从argv[0]开始让我困惑-这让我觉得argv[0]不算作argv。