2

私は小さなスクリプトを作成しようとしています (ちなみに、私は 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()
4

1 に答える 1

7

Python の哲学の一部は、「許可よりも許しを求めるほうがよい」です。これはエラー ケースであるため、try, に害はありませんexcept。そうは言っても、それを避けたい場合は、引数の数を確認するだけです:

def main():
    if len(argv) < 2:
        print "We need at least one argument"
        return
    # Remainder of implementation goes here
于 2013-07-23T06:03:55.297 に答える