0

如果发现索引错误,如何将字符串传递给变量?考虑代码:

for l1, l2 in zip(open('file1.list'), open ('file2.list')):
  a=fasta1[int(l1)]
  b=fasta2[int(l2)]

  alignments = pairwise2.align.globalxx(a,b)
  top_aln = alignments[0]
  aln_a, aln_b, score, begin, end = top_aln
  print aln_a+'\n'+aln_b
  outfast1 = aln_a
  outfast2 = aln_b

必须导入其中许多函数(pairwise2 align),但 file.lists 是单列文本文件,每行有一个序列 ID(文本和数字),用于从 fasta1 和 fasta2 文本文件中提取。

基本上,我想try:列出每个命令a=fasta1[int(l1)](像“GGG”这样的文字:

for l1, l2 in zip(open('file1.list'), open ('file2.list')):
 try:
  a=fasta1[int(l1)]
 except IndexError,e:
  a="GGG"
 continue

 try:
  b=fasta2[int(l2)]
 except (IndexError):
  b="CCC"
 continue

这段代码不能很好地工作(当与上面的代码集成时),考虑到我缺乏 python 能力,这并不奇怪,但我不太清楚为什么。尽管有打印调用,我实际上没有得到文本输出......我在想这个吗?如果索引中没有错误,我只希望它继续并进行成对对齐(使用第一个 a 和 b 变量),然后将一些文本打印到标准输出。

有任何想法吗?

4

2 回答 2

2

Python 的条件(又名三元)表达式可以为您单行此。他们经常因为缺乏可读性而受到批评,但我认为这个例子读起来已经足够好了。

a = fasta1[int(l1)] if int(l1) < len(fasta1) else "GGG"
于 2017-02-21T04:43:26.817 回答
0

您不需要continue,因为它会跳过循环的迭代。考虑以下:

for l1, l2 in zip(open('file1.list'), open ('file2.list')):
 a = 'GGG'
 b = 'CCC'
 try:
  a = fasta1[int(l1)]
  b = fasta2[int(l2)]
 except IndexError:
  pass
于 2017-02-21T04:54:41.647 回答