使用我传递给函数的字符串获取 NameError,表示当我尝试在函数中使用它时未定义字符串



我有这个rev_comp()函数

>>> def rev_comp(sequence):
...     def reverse(s):
...             letters = list(s)
...             letters.reverse()
...             return ''.join(letters)
...     def complement(s):
...             basecomplement = {'A': 'T', 'C': 'G', 'T': 'A', 'G': 'C', 'a': 't', 'c': 'g', 't': 'a', 'g': 'c'}
...             letters = list(s)
...             letters = [basecomplement[base] for base in letters]
...             return ''.join(letters)
...     reverse(sequence)
...     complement(sequence)
...     return sequence
...

外显子是我想反转和赞美的字符串。

本质上,它应该将外显子反转为'gtacgtgtacgt',然后替换以下各项的每个实例:

g -> c, t -> a, c -> g, and a ->t

rev_comp(exon)应该返回"catgcacatgca"

>>> exon = "tgcatgtgcatg"
>>> rev_comp(exon)
'tgcatgtgcatg'

我用 pdb 运行它,它吐出了所有这些:

>>> pdb.run(rev_comp(exon))
> <string>(1)<module>()->None
(Pdb) n
NameError: "name 'tgcatgtgcatg' is not defined"
> <string>(1)<module>()->None
(Pdb) n
--Return--
> <string>(1)<module>()->None
(Pdb) >>> def rev_comp(sequence):
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) ...     def reverse(s):
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) ...             letters = list(s)
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) ...             letters.reverse()
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) ...             return ''.join(letters)
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) ...     def complement(s):
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) ...             basecomplement = {'A': 'T', 'C': 'G', 'T': 'A', 'G': 'C', 'a': 't', 'c': 'g', 't': 'a', 'g': 'c'}
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) ...             letters = list(s)
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) ...             letters = [basecomplement[base] for base in letters]
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) ...             return ''.join(letters)
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) ...     reverse(sequence)
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) ...     complement(sequence)
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) ...     return sequence
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) ...
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) >>> exon = "tgcatgtgcatg"
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) >>> rev_comp(exon)
*** SyntaxError: invalid syntax (<stdin>, line 1)
(Pdb) 'tgcatgtgcatg'
'tgcatgtgcatg'
(Pdb) n
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/usr/lib/python2.7/pdb.py", line 1238, in run
    Pdb().run(statement, globals, locals)
 File "/usr/lib/python2.7/bdb.py", line 387, in run
    exec cmd in globals, locals
 File "<string>", line 1, in <module>
NameError: name 'tgcatgtgcatg' is not defined

这对我来说意义不大。

谁能帮我弄清楚为什么它认为我传入的序列没有定义?

您忽略了 reversecomplement 的返回值。 试试这个:

sequence = reverse(sequence)
sequence = complement(sequence)
return sequence

最新更新