Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:为局部变量取消绑定LocalError_Python_Variables - Fatal编程技术网

Python:为局部变量取消绑定LocalError

Python:为局部变量取消绑定LocalError,python,variables,Python,Variables,我有以下代码: import fileinput import sys import re def reading_fasta(fasta): #### defining variables name = "" hashseq = {} sequence = "" ### loop over file for line in fileinput.input(fasta): if not line: hash

我有以下代码:

import fileinput
import sys
import re

def reading_fasta(fasta):
    #### defining variables
    name = ""
    hashseq = {}
    sequence = ""
    ### loop over file
    for line in fileinput.input(fasta):
        if not line:
            hashseq[name] = sequence
            fileinput.close()
            break
        elif re.match("^>.*", line):
            if fileinput.lineno() != 1:
                hashseq[name] = sequence
                del sequence
            name = re.split('\W+', line)[1]
        else:
            line.rstrip("\n")
            sequence += line

reading_fasta(sys.argv[1])
出现以下错误:

Traceback (most recent call last):
  File "parse.py", line 25, in <module>
    reading_fasta(sys.argv[1])
  File "parse.py", line 23, in reading_fasta
    sequence += line
UnboundLocalError: local variable 'sequence' referenced before assignment
回溯(最近一次呼叫最后一次):
文件“parse.py”,第25行,在
正在读取\u fasta(sys.argv[1])
文件“parse.py”,第23行,在reading_fasta中
序列+=行
UnboundLocalError:赋值前引用的局部变量“序列”
为什么呢?在网上冲浪时,我发现了同样的错误,但因为变量是在全局环境中设置的。尽管如此,我的变量在函数中定义为局部变量。

在某个点删除变量;这就解开了名字的束缚

del sequence
不要那样做;将其重新绑定到空字符串,可能是:

sequence = ''
请注意,首先在列表中收集字符串,然后使用
str.join()
一次性连接,这样更有效:

我对您的代码做了一些修改,将输入文件对象用作上下文管理器(因此它会自动关闭)。在file对象上循环永远不会产生完全的空行,检测文件是否已完成的最佳方法是在循环完成后处理剩余的行。您根本不需要在此处使用
fileinput.input()
,因为您可以简单地测试
sequence
是否不是空的


我还假设您希望返回生成的词典。:-)

一件小事竟能浪费我这么多时间,真是太神奇了。。。谢谢!
def reading_fasta(fasta):
    hashseq = {}
    with open(fasta) as inf:
        sequence = []
        name = ''
        for line in inf:
            if re.match("^>.*", line):
                if sequence:
                    hashseq[name] = ''.join(sequence)
                    sequence = []
                name = re.split('\W+', line)[1]
            else:
                sequence.append(line.rstrip('\n'))
        if sequence:
            # remainder
            hashseq[name] = ''.join(sequence)
    return hashseq