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”对象是不可调用的
从我看到你在某处有一个列表,你试图用()方括号而不是[]方括号访问所说的列表。对于我拉入的文本文件的每一行,变量都会改变,所以它们必须在类内可用,但不能在类外使用,那么你推荐什么呢?对于我拉入的文本文件的每一行,变量都会改变,所以它们必须在类内可用,但不能在类外使用,那么你推荐什么呢?