Python 使用self声明变量时出错

Python 使用self声明变量时出错,python,object-oriented-analysis,Python,Object Oriented Analysis,我有一段代码,它将文本文件中的每一行都拉入,如下所示: 13797906 23 n 04洪水0淹没0洪水0急流0 005@13796604 n 0000+00603894 a 0401+00753137 v 0302+01527311 v 0203+02361703 v 0101 |一个压倒性的数字或数量;“大量的请求”;“滥用的洪流” 它给了我变量声明的错误。下面的代码被缩短,因为它太长,无法在这里发布 #!/usr/bin/python # -*- coding: utf-8 -*- fro

我有一段代码,它将文本文件中的每一行都拉入,如下所示:

13797906 23 n 04洪水0淹没0洪水0急流0 005@13796604 n 0000+00603894 a 0401+00753137 v 0302+01527311 v 0203+02361703 v 0101 |一个压倒性的数字或数量;“大量的请求”;“滥用的洪流”

它给了我变量声明的错误。下面的代码被缩短,因为它太长,无法在这里发布

#!/usr/bin/python
# -*- coding: utf-8 -*-
from rdflib import URIRef, Graph
from StringIO import StringIO

class Wordnet():

    def __init__(self):
        self.graph = Graph()
        self.before_at = ''
        self.after_at = ''
        self.word_part = ''
        self.gloss_part = ''
        self.lex_filenum = ''
        self.synset_offset = ''
.............more declarations(too long to add here).....

    def process_file(self):
        self.file = open("new_2.txt", "r")
        return self.file

    def line_for_loop(self, file):
        for line in file:
            self.split_pointer_part(line)
            self.split_word_part(line)
            self.split_gloss_part(line)
            self.process_lex_filenum(word_part)   ###error starts here on line 48
            self.process_synset_offset(word_part)
.............more methods(too long to add here).....

    def split_pointer_part(self, line):
        self.before_at, self.after_at = line.split('@', 1)
        return self.before_at, self.after_at    

    def split_word_part(self, line):
        self.word_part = line.split()
        return self.word_part

    def split_gloss_part(self, line):
        self.gloss_part = line.strip().split('|')
        return self.gloss_part

    def process_lex_filenum(self, word_part):
        self.lex_filenum = word_part(1)
        return self.lex_filenum

    def process_synset_offset(self, word_part):
        self.synset_offset = word_part[0]
        return self.synset_offset

............plus more................

def print_graph(self, graph):
        print graph.serialize(format='nt')

if __name__ == '__main__':
    wordnet = Wordnet()
    my_file = wordnet.process_file()
    wordnet.line_for_loop(my_file)   ###line 225
    wordnet.print_graph(graph)
当我试着运行这个文件时,我得到了这个错误

File "wordnet.py", line 225, in <module>
    wordnet.line_for_loop(my_file)
  File "wordnet.py", line 48, in line_for_loop
    self.process_lex_filenum(word_part)
NameError: global name 'word_part' is not defined
文件“wordnet.py”,第225行,在
wordnet.line\u for\u循环(我的\u文件)
文件“wordnet.py”,第48行,在\u for\u循环行中
self.process_lex_filenum(word_部分)
名称错误:未定义全局名称“word\u part”
第48行和第225行显示在上面的方框注释中。
我不知道这是否是我声明自变量的某种方式,或者是我将它们传递到每个方法的方式,甚至是在
\uuuuu main\uuuuu
中如何调用它,但我不知道我在这里做错了什么。我对python相当陌生,因此有些问题对我来说很复杂。

错误不在于
自身。它与全局变量
world\u part一起使用

File "wordnet.py", line 225, in <module>
    wordnet.line_for_loop(my_file)
  File "wordnet.py", line 48, in line_for_loop
    self.process_lex_filenum(word_part)
NameError: global name 'word_part' is not defined
  • 如果它是一个模块变量,这是一个定义为其他模块全局范围的变量,您应该导入它:

    from my_world_module import world_part # import
    
    class Wordnet():
        def __init__(self):
            ...
    
        def line_for_loop(self, file):
            ...
            self.process_lex_filenum(word_part) # use
    
  • 如果它是一个实例变量,您应该从self引用它:


  • 错误不在
    自身。它与全局变量
    world\u part一起使用

    File "wordnet.py", line 225, in <module>
        wordnet.line_for_loop(my_file)
      File "wordnet.py", line 48, in line_for_loop
        self.process_lex_filenum(word_part)
    NameError: global name 'word_part' is not defined
    
  • 如果它是一个模块变量,这是一个定义为其他模块全局范围的变量,您应该导入它:

    from my_world_module import world_part # import
    
    class Wordnet():
        def __init__(self):
            ...
    
        def line_for_loop(self, file):
            ...
            self.process_lex_filenum(word_part) # use
    
  • 如果它是一个实例变量,您应该从self引用它:


  • “NameError:global name'word\u part'未定义”告诉您python找不到名为“word\u part”的全局变量,因此您需要在第48行将word\u part替换为self.word\u part。

    “NameError:global name'word\u part'未定义”告诉您python找不到名为“word\u part”的全局变量所以你需要在第48行用self.word\u部分替换word\u部分。

    好的,我已经更改了,现在我得到了这个:-
    self.lex\u filenum=word\u部分(1)TypeError:“list”对象不可调用,我看到你在某处有一个列表,你正试图用()括号而不是[]访问所述列表bracketsok所以我已经改变了,现在我得到了这个:-
    self.lex_filenum=word_part(1)TypeError:“list”对象是不可调用的
    从我看到你在某处有一个列表,你试图用()方括号而不是[]方括号访问所说的列表。对于我拉入的文本文件的每一行,变量都会改变,所以它们必须在类内可用,但不能在类外使用,那么你推荐什么呢?对于我拉入的文本文件的每一行,变量都会改变,所以它们必须在类内可用,但不能在类外使用,那么你推荐什么呢?