我的程序需要2或3个命令行参数:
-s是一个可选参数,表示稍后程序中的开关 -infile是文件输入 -outfile是写文件
我需要程序打印错误消息,如果发生以下任何情况,请退出:
我写道:
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中,它早先被删除了。所以我不确定如何正确地写这个......
答案 0 :(得分: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)