发现更大的SEO世界
 找回密码
 注册
搜索
»首页»SEO培训 SEO论坛 SEO交流 帖子
发新帖
lycfaint,好好学习SEO,争取从穷屌丝变成会SEO的屌丝    

python学习过程中卡住的bug(持续更新-7-31)

本帖最后由 lycfaint 于 2014-7-31 17:12 编辑

刚入门python,之前没用过正则,所以在这个过程中出现了一堆错误,查了一堆资料。但是还是会出现错误,这篇文章就是把在实战过程中卡住很长时间的bug,这些bug或者可能知道结果的时候觉得很简单,但是在你没发现之前确实可以卡你好几个小时。(当然找到的那刹那也叫一个爽,相信遇到过的兄弟应该深有体会。)


错误一    卡了3个小时


正则表达式中'\d'用来匹配所有数字,其实只可以匹配一个数字。应该写成'\d+'


想要匹配的是:新闻有N条


写的正则为:新闻有\d条


正确的写法:新闻有\d+条


但是结果中有不止一个数字的,就导致了当只有一个数字时,会跑出结果,当不止一个数字时,就会报如下错误:


AttributeError:'NoneType' object has no attribute 'group'


得到收获:解决的过程是技术部的一个同事帮忙的,他在过程中加了好多个调试点,觉得这个是个很不错的做法,深刻学习。这个错误拿出来分享是因为,刚开始看那个错误提示,会以为没用好对象的属性(这类错误出的也不少,各种瞎倒腾也就好了),但是单独调用那个版块的时候就没有错(因为用的例子只是个位数的结果)。我这个bug里出现的问题,正则表达写错,一部分有结果,一部分编译后再search的结果集为空,就导致了none这个对象木有group这个方法,也就报错了。


下面是模块段加了测试的节点:


def num(address):   
        html=serprs.curl(address)
        #print address(1)
        pat=re.compile(r'抱歉未找到|新闻有\d+条')
        #print pat(2)
        #print html(3)
        res=pat.search(html)
        #print res(4)
        return res.group()



错误二


算是两个小的错误吧,在折腾jieba分词的时候出现的,卡得不是很久,但是感觉挺奇葩的,记录下来分享给各位。


(1)jieba.load_userdict("figure.txt")


报错,说是编码没法解码


解决方法:将字典编码改为utf-8,就是txt另存为的时候,编码方式改为utf-8,实际原因不知道,上个图好了


(2)jieba分词中设置字典路径的问题:


jieba.load_userdict("d:\dict\\figure1.txt")


原来写的是:jieba.load_userdict("d:\dict\figure1.txt")


会被转译成别的意思,导致无法找到正确的字典,目前就知道f,不知道别的字母会不会变意思。



写在最后,除了这个之外,还可以看看《17个新手常见Python运行时错误》,我是在里面没有找到这个错误,才想写下这个的。这篇文章会不断更新自己出现过的卡的时间比较久的bug分享(尽自己可能去讲清楚,不清楚的留言喽,尽可能再解释一下)。也许高手看了会觉得这个错误很2逼,但是我觉得肯定还会有人遇到跟我一样悲剧的问题,所以这篇文章也就存在他的价值(自己是这么以为的)

load错误界面.jpg (107 KB, 下载次数: 877)

jieba分词解码错误

jieba分词解码错误

路径没设置好.jpg (97.44 KB, 下载次数: 873)

jieba分词路径被转译错误

jieba分词路径被转译错误
发表于 2014-7-22 16:19:53 |只看大图
回复 收藏
张伟,请到个人资料页面设置个人签名    

我一般都用findall
发表于 2014-7-22 16:24:34
回复 收藏
lycfaint,好好学习SEO,争取从穷屌丝变成会SEO的屌丝    

张伟 发表于 2014-7-22 16:24
我一般都用findall

findall出来是list,还要转换,因为就找一个,所以就不用findall。(其实主要是看的好多教程都直接用group,就依葫芦画瓢了)而且findall在我遇到这个问题里面也会出现这个错误。因为list接收到的也是none,列表为空。
 楼主| 发表于 2014-7-22 17:00:21
回复 收藏
思明,技术宅男SEO之路    QQ:176089710    

re.search函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None。
所以可以这样子写

pat=re.compile(r'抱歉未找到|新闻有\d+条')
res=pat.search(html)
if res:
    return res.group()
else:
     print  "not found"
     return None
发表于 2014-7-22 17:22:45
回复 收藏
lycfaint,好好学习SEO,争取从穷屌丝变成会SEO的屌丝    

思明 发表于 2014-7-22 17:22
re.search函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None。
...

嗯,这不就是菜鸟起步阶段,用不惯try,except....
 楼主| 发表于 2014-7-22 17:57:39
回复 收藏
快速回复 返回顶部 返回列表