繁体   English   中英

python isinstance无法按预期工作

[英]python isinstance is not working as expected

我正在使用python 2.7的scrapy 0.20

这是我的代码

def process_spider_output(self, response, result, spider):
    print 'process_spider_output'
    for r in result:
        print 'r type = {0}'.format(type(r))
        if isinstance(r, Request):
            key = self._get_key(r)
            if self.db.has_key(key):
                spider.log("Ignoring already visited: %s" % r, level=log.INFO)
                print 'Ignoring already visited: {0}'.format(r)
                continue
        elif isinstance(r, FlexibleItem):
            key = self._get_key(response.request)
            self.db[key] = str(time.time())
            spider.log("Writing to log: %s" % key, level=log.INFO)
            print 'Writing to log {0}'.format(s)
        yield r

我正在尝试打印r的类型,我的cmd上的结果是:

r type = <class 'TestSpider.spiders.FlexibleItem.FlexibleItem'>

所以类型是FlexibleItem

但是为什么第二个条件永远不会变为真呢? 从第二种情况我从未见过印刷声明

编辑

此图片适合现在正在帮助我的友善用户。

在此处输入图片说明

在这种情况下,要么是Ignacio所说的,要么是问题描述不正确。

但是为什么第二个条件永远不会变为真呢? 从第二种情况我从未见过印刷声明

您确定第二个条件永远不会成立吗? elif isinstance(r, FlexibleItem):后面elif isinstance(r, FlexibleItem): 1/0 elif isinstance(r, FlexibleItem):确定它。

在任何情况下,找出发生了什么的更好的方法是使用调试器。 放入import pdb; pdb.set_trace() 第一个if之前的import pdb; pdb.set_trace()允许逐步运行脚本并查看正在发生的情况。

有两种可能性:

  1. FlexibleItem实际上不是TestSpider.spiders.FlexibleItem.FlexibleItem 确保没有两种方法导入名称。

  2. TestSpider.spiders.FlexibleItem.FlexibleItemRequest的后代。 如果是这种情况,则if语句为true,并且永远不会对elif语句进行求值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM