1

私のプログラムは2つまたは3つのコマンドラインパラメータを取ります:

-sはオプションのパラメーターであり、後でプログラム内のスイッチを示します。-infileはファイル入力です。-outfileは書き込まれるファイルです。

エラーメッセージを出力し、次のいずれかが発生した場合に終了するには、プログラムが必要です。

  • ユーザーが.genesで終わらないinfile名を指定している
  • ユーザーは、.faまたは.fastaで終わらない出力ファイル名を指定します
  • ユーザーが2つ未満または3つを超えるパラメーターを提供する
  • ユーザーの最初のパラメーターはダッシュで始まりますが、「-s」ではありません

私は書いた:

def getGenes(spliced, infile, outfile):
spliced = False
if '-s' in sys.argv:
    spliced = True
    sys.argv.remove('-s')
    infile, outfile = sys.argv[1:]
if not infile.endswith('.genes'):
    print('Incorrect input file type')
    sys.exit(1)
if not outfile.endswith('.fa' or '.fasta'):
    print('Incorrect output file type')
    sys.exit(1)
if not 2 <= len(sys.argv) <= 3:
    print('Command line parameters missing')
    sys.exit(1)
if sys.argv[1] != '-s':
    print('Invalid parameter, if spliced, must be -s')
    sys.exit(1)

ただし、s.argv [1]が常に'-s'と等しくないため、最初と最後の条件が矛盾しているなど、いくつかの条件と矛盾しています。これは、's'がargvに存在する場合に削除されたためです。ついさっき。だから私はこれを正しく書く方法がわかりません...

4

1 に答える 1

1

sliced=Falseインデントされていません

def getGenes(spliced, infile, outfile):
     spliced = False

sys.argv.remove('s')そのはず sys.argv.remove('-s')

2つの条件が互いに矛盾しています。

if '-s' in sys.argv:
    spliced = True
    sys.argv.remove('-s') # you removed '-s' from sys.argv ,so the below if condition becomes false
    infile, outfile = sys.argv[1:]  

if sys.argv[1] != '-s':
    print('Invalid parameter, if spliced, must be -s')
    sys.exit(1)

コードの編集バージョン:

import sys

def getGenes(spliced, infile, outfile):
 spliced = False
if '-s' in sys.argv:
    spliced = True
    infile, outfile = sys.argv[2:]
if not infile.endswith('.genes'):
    print('Incorrect input file type')
    sys.exit(1)
if not outfile.endswith('.fa' or '.fasta'):
    print('Incorrect output file type')
    sys.exit(1)
if not 3 <= len(sys.argv) <= 4:
    print('Command line parameters missing')
    sys.exit(1)
if sys.argv[1] != '-s':
    print('Invalid parameter, if spliced, must be -s')
    sys.exit(1)
于 2012-04-24T21:23:48.970 に答える