3

これは私が持っているプログラムです:

from sys import argv

script, arg1 = argv

def program(usr_input, arg1):
    if(usr_input == arg1):
        print "CLI argument and user input are identical"

    else:
        print "CLI argument and user input aren't identical"

if arg1 != "":
    usr_input = raw_input("enter something: ")
    program(usr_input, arg1)

else:
    print "You have not entered a CLI argument at all."

私は得る:

Traceback (most recent call last):
  File "filename.py", line 3, in <module>
    script, arg1 = argv
ValueError: need more than 1 value to unpack

コマンドライン引数の欠如を検出し、このエラーを受け取る代わりにエラー/例外をスローするにはどうすればよいですか?

4

5 に答える 5

14

__main__アプリケーション全体へのエントリ ポイントとして、スクリプトの場所にあるプログラムの引数をチェックすることをお勧めします。

import sys
import os

def program(*args):
    # do whatever
    pass

if __name__ == "__main__":
    try:
        arg1 = sys.argv[1]
    except IndexError:
        print "Usage: " + os.path.basename(__file__) + " <arg1>"
        sys.exit(1)

    # start the program
    program(arg1)
于 2012-12-24T03:51:17.393 に答える
3

例外を処理できます:

In [6]: def program(argv):
    try:
        script, argv1 = argv
    except ValueError:
        print("value error handled")
   ...:         

In [7]: program(argv)
value error handled
于 2012-12-24T03:43:56.167 に答える
2

これを試して:

script = argv[0]
try:
    arg1 = argv[1]
except:
    arg1 = ''
于 2012-12-24T04:30:49.507 に答える
1

tryそこでステートメントを使用できます。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import sys

class MyError(Exception):
    def __init__(self, value):
        self.error_string = value

    def __str__(self):
        return eval(repr(self.error_string))

try:
    script, arg1 = sys.argv

except ValueError:     
    raise MyError, "Not enough arguments"
于 2012-12-24T03:43:15.417 に答える
1

それsys.argvがリストであることを確認するには、リストの長さをチェックして、それがあなたが望むものであることを確認する必要があります. 長さを確認するための小さな変更を加えたスクリプト:

from sys import argv

def program(usr_input, arg1):
    if(usr_input == arg1):
        print "CLI argument and user input are identical"
    else:
        print "CLI argument and user input aren't identical"

if len(argv)== 2:
    arg1 = argv[1]
    usr_input = raw_input("enter something: ")
    program(usr_input, arg1)
else:
    print "You have not entered a CLI argument at all."
于 2012-12-24T03:57:57.180 に答える