【问题标题】:How to avoid a NameError when defining a class? [closed]定义类时如何避免 NameError? [关闭]
【发布时间】:2014-11-09 19:34:26
【问题描述】:

我正在写一堂课:

from bioservices import KEGGParser
class Retrieve_Data():
    def __init__(self):

        def hugo2kegg(self,gene_name,organism):
            s=KEGGParser()
            kegg_gene_entry = s.get(organism+':'+gene_name)
        return kegg_gene_entry


a = Retrieve_Data()

但是当我运行它时,我得到一个 NameError:

NameError: global name 'kegg_gene_entry' is not defined

谁能告诉我哪里出错了?

【问题讨论】:

  • 检查 hugo2kegg 的缩进。
  • 我再次缩进hugo2kegg位的原因是因为我有一个缩进错误,没有...
  • 这里没有缩进的错误并不让我感到惊讶,因为这种情况下的代码在语法上是不正确的。你想完成什么?
  • 最后我想生成一个类,它包含几种方法来查找 HUGO 基因符号并使用 python 生物服务模块快速检索有关它的信息。这是第一步,即将 HUGO 基因符号转换为 UniProt 登录 ID
  • 我想我已经解决了您的主要问题,如果是,请单击我的答案旁边的复选标记接受,您的代表将获得 +2。如果您有不同的问题,请提出新的问题。 +1 的努力。

标签: python class nameerror bioservices


【解决方案1】:

你的 init 不能返回任何东西,如果你不打算使用你的定义,那么在其中定义任何东西可能是没有意义的。你可能想摆脱你的__init__ 并做这样的事情:

from bioservices import KEGGParser
class Retrieve_Data():
    def hugo2kegg(self,gene_name,organism):
        s=KEGGParser()
        kegg_gene_entry = s.get(organism+':'+gene_name)
        return kegg_gene_entry


a = Retrieve_Data()

您不需要__init__,除非您希望在对象实例化后立即发生。

如果你想要一个不做任何事情的 init,你需要在它下面有 something

class Retrieve_Data():
    def __init__(self):
        pass # we'll add more later?

class Retrieve_Data():
    def __init__(self):
        '''not doing anything now, maybe we'll write an init later?'''

然后你可以继续为这个对象定义另一个函数/方法。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多