程序为什么执行到这里就停了: if isinstance(item, AnItem): 这句明明是真,到这里就不执行了

2017-04-29 09:42:40 +08:00
 bb2018
我在 items  里定义了 AnItem

也在 spider.py 里用  item = AnItem() 定义了.

为什么上面的:if isinstance(item, AnItem):  这句后面的就不执行了.

说明:if isinstance(item, AnItem): 是假, 不知道为什么?

我看别人的代码.还有网上的例子都是这样写的

不知道我写的哪里不对?

class AnPipeline(object):
def process_item(self, item, spider):
print ('process_item1111111111111111111111111111')
if isinstance(item, AnItem):
print ('process_item222222222222222222222222222')
title = item['title']
content = item['content']
Sql.insert_data_all(title, content)
print (u'存完一条信息 aaaaaaaaaaaa')
return item
4137 次点击
所在节点    Python
15 条回复
woshixiaohao1982
2017-04-29 10:31:35 +08:00
新手别学弱类型语言,很多坑
ipwx
2017-04-29 11:07:44 +08:00
@woshixiaohao1982 Python 是强类型。

@bb2018 我估计你的对象八成不是 AnItem,不信你 print(type(item)) 试试。
imn1
2017-04-29 11:28:24 +08:00
1.你知道 isinstance 是判断什么的么?
2.作用域理清了么?
zoudm
2017-04-29 13:05:26 +08:00
@ipwx 我猜他想说 动态类型语言
GitFree
2017-04-29 15:58:08 +08:00
type(item)试下
cszeus
2017-04-29 15:58:55 +08:00
你的 item 不是 process_item 传进来的参数 item 么,跟你之前 item = AnItem()是同一个么?
bb2018
2017-04-29 16:03:39 +08:00
@ipwx 是的. item 不是 AnItem

if isinstance(item, AnItem):
print ('zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz')
else:
print ('jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj')

pipilines.py 里用上面语句测试了一下:输出 jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
不知道哪里出了问题了.
按正常的逻辑在 spiders.py 里定义了:  item = ZbaqcnItem()
该导入的都导了.那在在 pipilines.py. 应该是真的啊?


现在我感觉应该是 import item 有问题?

我在 anspiders.py 里这样导入:
from aqccncn.items import AnItem
总是提示出错. ImportError: No module named items
在网上搜了半天也没找到可行的解决办法.
只好用下面的方法.

然后我在 spiders 文件里建了个 items.py
用 from items import AnItem  这样导入的.

然后就出现后来的 if isinstance(item, AnItem):  是 False 了.

难道是这里的原因?
bb2018
2017-04-29 16:05:50 +08:00
@imn1
1.我知道 isinstance 是判断什么的

2..作用域理清了么?这一个我不是很清楚.但是我看很多例子都是这样写的.正在思考.
ryd994
2017-04-29 17:30:14 +08:00
Python 是执行一段定义后得到一个“ class 对象”
你把同一个定义写两边那能是同一个定义么?
bb2018
2017-04-29 18:00:27 +08:00
@ryd994 多谢.一语点醒了.现在就在 spiders 文件夹里放一个 items.py 这样就正常了.

但是还有一个问题, 如果是在 与 spiders 文件夹   settgins.py 文件同级的目录里建 items.py 文件.为什么这样导入:  from AnAnAn.items import AnItem 就会提示:ImportError:No module named AnAnAn.items 这提示?
在 AnAnAn 文件夹里明明有默认生成的那个 items.py 也在里面添加了相应的代码.
bb2018
2017-04-29 20:44:01 +08:00
@cszeus 不是同一个 items.py 的 AnItem  所以不对.现在改回来了.又出现上面的 from AnAnAn.items import AnItem 就会提示:ImportError:No module named AnAnAn.items 这提示了....
zsz
2017-04-29 21:49:34 +08:00
@bb2018

在 AnAnAn 目录下加一个 __init__.py 空文件

加我们的群问效率更高,一群工程师组建的面向初学者的
Python Linux 学习群,qq 群号:278529278,
Php Linux 学习群,qq 群号:476648701,
非商业性质,拒绝广告,只接收真正想学这方面技术的朋友,交流学习,申请请说明来自 v2ex
ipwx
2017-04-30 11:38:28 +08:00
@bb2018 你可能需要学习一下 Python 包管理方式的最佳实践。

我写了这么多年 Python,可以说 Python 的包管理方式,如果你想不踩坑,有且仅有一种。你可以从各种开源项目的代码看出来怎么做,也能找靠谱的 tutorial,比如这个( http://python-guide-pt-br.readthedocs.io/en/latest/writing/structure/)

这种组织结构是各种血泪总结而出的经验。如果你不参考,等你多写几个项目,最后你会发现不得不这么做。
bb2018
2017-04-30 15:11:22 +08:00
@zsz AnAnAn 目录下已经有一个__init__.py 空文件 ,AnAnAn 就是项目名称。会自动生成一个的。
bb2018
2017-04-30 15:12:40 +08:00
@ipwx 谢谢。正在看

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/358078

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX