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',因为如果 argv 中存在 's',它就会被删除早些时候。所以我不确定如何正确写这个......

4

1 回答 1

1

sliced=False没有缩进

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

sys.argv.remove('s')它应该是 sys.argv.remove('-s')

两个条件相互矛盾:

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 回答