Python isinstance()返回False,原因未知

Python isinstance()返回False,原因未知,python,google-app-engine,Python,Google App Engine,因此,情况如下: 我使用的是流,我的类FanoutPipeline是从库中的管道类派生的: from pipeline import pipeline class FanoutPipeline(pipeline.Pipeline): 当管道进程运行时,它会执行一项检查,以验证该对象实际上是从管道派生的类的实例,但返回False: yielded = pipeline_iter.send(next_value) # here I check that yielded is an obje

因此,情况如下:
我使用的是流,我的类FanoutPipeline是从库中的管道类派生的:

from pipeline import pipeline
class FanoutPipeline(pipeline.Pipeline):
当管道进程运行时,它会执行一项检查,以验证该对象实际上是从管道派生的类的实例,但返回False:

  yielded = pipeline_iter.send(next_value)
  # here I check that yielded is an object of `FanoutPipeline`
  # class, plz see logs output below
  if isinstance(yielded, Pipeline):  # returns false here
我添加了大量日志以获取类树及其模块:

  import inspect
  logging.debug('Yielded: {}'.format(yielded))
  for cls in inspect.getmro(yielded.__class__):
      logging.debug('Yielded base: {}'.format(inspect.getmodule(cls)))
      logging.debug('Yielded base: {}'.format(cls))
  logging.debug('PipelineMeta classes: {}'.format(_PipelineMeta._all_classes))
  logging.debug('Pipeline: {}'.format(Pipeline))
  logging.debug('Pipeline module: {}'.format(inspect.getmodule(Pipeline)))
  for cls in inspect.getmro(Pipeline):
    logging.debug(inspect.getmodule(cls))
  if isinstance(yielded, Pipeline):
并得到了输出:

D21:55:48.079:project.handlers.pipeline\u gcm.fanouppipeline(*(无,{u'campaign\u id:u'xxx',u'campaign\u name:u'xmas通知',u'execution':{u'action':u'market',u'conditions':{u'delayBetweenNotificationsHours':0,u'in…(515字节),**)
D 21:55:48.079屈服基底:
D 21:55:48.079屈服基底:
D 21:55:48.080屈服基底:
D 21:55:48.080屈服基底:
D 21:55:48.080屈服基底:
D 21:55:48.080屈服基底:
D 21:55:48.081 PipelineMeta类:[]
D 21:55:48.081管道:
D 21:55:48.081管道模块:
D 21:55:48.082
D 21:55:48.082
正如您所看到的,在基类中,模块路径显然是匹配的

以下是一些可能发生的想法: 1.对象以某种方式在进程之间传递,检查失败,因为一个进程中加载了一个基类,另一个进程中加载了另一个基类。 2.相对路径存在差异,即创建对象的过程中的
pipeline.pipeline
模块
以及libraries.pipeline.pipeline,并且正在执行
isinstance
检查


你能帮我解决这个问题吗?我首先应该尝试什么?失败的原因可能是什么?

你正在导入两个版本的类,一个是
libraries.pipeline.pipeline
,另一个是
pipeline.pipeline.pipeline
。这意味着你同时拥有
/base/data/home/apps/s~project-dev3/9.389913797024223872/
/base/data/home/apps/s~project-dev3/9.389913797024223872/libraries
位于
sys.path
中。虽然您知道它们只是指向同一模块的两条路径,但python并不知道,并将它们视为两个不同的类


您需要决定是基于
还是基于
中的各种模块进行导入,然后一致地编写导入。您还应该停止将“uncosen”目录添加到
sys.path
,以便以错误的方式导入模块失败。

什么是
类型(已生成)
return?@KaustavDatta:type:我猜……我想您正在导入该类的两个版本,一个是
libraries.pipeline.pipeline
,另一个是
pipeline.pipeline.pipeline
。这意味着您同时拥有
/base/data/home/apps/s~project-dev3/9.389913797024223872/
/base/data/home/apps/s~project-dev3/9.389913797024223872/libraries
sys.path
中。你不应该在你的python路径中有
/base/data/home/apps/s~project-dev3/9.389913797024223872/
库。任何
@tdelaney非常感谢你,我将
从pipeline.pipeline
替换为
库中的
。pipeline.pipeline
在声明FanoutPipeline类的地方,它解决了这个问题。请将您的注释移动到一个答案,以便我可以选择它作为解决方案?
D 21:55:48.079 Yielded: project.handlers.pipeline_gcm.FanoutPipeline(*(None, {u'campaign_id': u'xxx', u'campaign_name': u'xmas notification', u'execution': {u'action': u'market', u'conditions': {u'delayBetweenNotificationsHours': 0, u'in... (515 bytes), **{})
D 21:55:48.079 Yielded base: <module 'project.handlers.pipeline_gcm' from '/base/data/home/apps/s~project-dev3/9.389913797024223872/projects/handlers/pipeline_gcm.pyc'>
D 21:55:48.079 Yielded base: <class 'project.handlers.pipeline_gcm.FanoutPipeline'>
D 21:55:48.080 Yielded base: <module 'pipeline.pipeline' from '/base/data/home/apps/s~project-dev3/9.389913797024223872/libraries/pipeline/pipeline.pyc'>
D 21:55:48.080 Yielded base: <class 'pipeline.pipeline.Pipeline'>
D 21:55:48.080 Yielded base: <module '__builtin__' (built-in)>
D 21:55:48.080 Yielded base: <type 'object'>
D 21:55:48.081 PipelineMeta classes: [<class 'libraries.pipeline.pipeline.Pipeline'>]
D 21:55:48.081 Pipeline: <class 'libraries.pipeline.pipeline.Pipeline'>
D 21:55:48.081 Pipeline module: <module 'libraries.pipeline.pipeline' from '/base/data/home/apps/s~project-dev3/9.389913797024223872/libraries/pipeline/pipeline.pyc'>
D 21:55:48.082 <module 'libraries.pipeline.pipeline' from '/base/data/home/apps/s~project-dev3/9.389913797024223872/libraries/pipeline/pipeline.pyc'>
D 21:55:48.082 <module '__builtin__' (built-in)>