程序为什么执行到这里就停了: if isinstance(item, AnItem): 这句明明是真,到这里就不执行了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
bb2018
V2EX    Python

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

  •  
  •   bb2018 2017-04-29 09:42:40 +08:00 4630 次点击
    这是一个创建于 3155 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我在 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
    15 条回复    2017-04-30 15:12:40 +08:00
    woshixiaohao1982
        1
    woshixiaohao1982  
       2017-04-29 10:31:35 +08:00
    新手别学弱类型语言,很多坑
    ipwx
        2
    ipwx  
       2017-04-29 11:07:44 +08:00
    @woshixiaohao1982 Python 是强类型。

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

    2..作用域理清了么?这一个我不是很清楚.但是我看很多例子都是这样写的.正在思考.
    ryd994
        9
    ryd994  
       2017-04-29 17:30:14 +08:00 via Android
    Python 是执行一段定义后得到一个“ class 对象”
    你把同一个定义写两边那能是同一个定义么?
    bb2018
        10
    bb2018  
    OP
       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
        11
    bb2018  
    OP
       2017-04-29 20:44:01 +08:00
    @cszeus 不是同一个 items.py 的 AnItem  所以不对.现在改回来了.又出现上面的 from AnAnAn.items import AnItem 就会提示:ImportError:No module named AnAnAn.items 这提示了....
    zsz
        12
    zsz  
       2017-04-29 21:49:34 +08:00
    @bb2018

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

    加我们的群问效率更高,一群工程师组建的面向初学者的
    Python Linux 学习群,qq 群号:278529278,
    Php Linux 学习群,qq 群号:476648701,
    非商业性质,拒绝广告,只接收真正想学这方面技术的朋友,交流学习,申请请说明来自 v2ex
    ipwx
        13
    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
        14
    bb2018  
    OP
       2017-04-30 15:11:22 +08:00
    @zsz AnAnAn 目录下已经有一个__init__.py 空文件 ,AnAnAn 就是项目名称。会自动生成一个的。
    bb2018
        15
    bb2018  
    OP
       2017-04-30 15:12:40 +08:00
    @ipwx 谢谢。正在看
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3498 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 05:05 PVG 13:05 LAX 21:05 JFK 00:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86