[英]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()
允许逐步运行脚本并查看正在发生的情况。
有两种可能性:
FlexibleItem
实际上不是TestSpider.spiders.FlexibleItem.FlexibleItem
。 确保没有两种方法导入名称。
TestSpider.spiders.FlexibleItem.FlexibleItem
是Request
的后代。 如果是这种情况,则if
语句为true,并且永远不会对elif
语句进行求值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.