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 · 4146 次点击
    这是一个创建于 2773 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我在 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   ·   实用小工具   ·   2706 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 07:31 · PVG 15:31 · LAX 23:31 · JFK 02:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.