今天寫了個(gè)爬蟲,在抓取數(shù)據(jù)的時(shí)候遇到一個(gè)問題,我覺得如果不注意,這個(gè)問題很容易被忽略,所以特意在博客記錄下:
問題描述:
比如,我在提取信息時(shí),這樣判斷類型:
type(answers[0].find_all("table")[0].string)
得到的結(jié)果為:
NoneType
所以,我就想,條件過濾的時(shí)候用is not 或者 != 就可以過濾了,比如這樣嘗試的時(shí)候:
type(answers[0].find_all("table")[0].string) is '''NoneType'''
結(jié)果我得到的是:
False
接下來,我用==來判斷也是False,我就猜想,難到不能用type()來判斷?
經(jīng)過查找,發(fā)現(xiàn)Nonetype類型,其實(shí)就是值為None,所以直接判斷值就可以了,比如這樣:
answers[0].find_all("table")[0].string is None
得到的結(jié)果:
True
ok,到這里,問題就解決了,列表推導(dǎo)式直接得到結(jié)果:
answer_table = [x.find_all("table")[0].string.strip() for x in answers if x.find_all("table")[0].string is not None]
answer_table 結(jié)果:
['水箱內(nèi)部有沒有通過,沒有的話就是水箱堵了。', '我的小松也一樣', '電控系統(tǒng)出現(xiàn)故障,電腦板傳出的信號與實(shí)際動(dòng)力不同,大泵與發(fā)動(dòng)機(jī)動(dòng)力不匹配發(fā)動(dòng)機(jī)負(fù)荷重所以高溫,動(dòng)作慢', '換個(gè)新水箱,多頁風(fēng)扇', '這就是把水箱蓋打開了,水流出來了,加點(diǎn)油門下水管就吸遍了。', '水箱堵了,拿下去專業(yè)悍水箱那輸通,就ok', '如果缸墊沒沖,就換水箱,我也準(zhǔn)備換水箱。']
補(bǔ)充:Python對type 'NoneType'>數(shù)據(jù)類型的處理
Python對象的概念
Python中,萬物皆對象,所有的操作都是針對對象的,那什么是對象,5是一個(gè)int對象,‘oblong'是一個(gè)str對象,異常也是一個(gè)對象,抽象一點(diǎn)是,人,貓,狗也是一個(gè)對象
那對于一個(gè)對象,它就有包括兩方面的特征:
屬性:去描述它的特征
方法: 它所具有的行為
所以,對象=屬性+方法 (其實(shí)方法也是一種屬性,一種區(qū)別于數(shù)據(jù)屬性的可調(diào)用屬性)
把具有相同屬性和方法的對象就可以歸為一類,即Classl。類就好比是一張藍(lán)圖,使用一個(gè)類可以創(chuàng)建多個(gè)對象實(shí)例 ,即人,貓,狗都屬于哺乳動(dòng)物類
類是對象的抽象化,對象是類的實(shí)例化。
類不代表具體的事物,而對象表示具體的事物
類也是有屬性和方法的。
數(shù)據(jù)類型也是對象
實(shí)際上Pyhton在面向?qū)ο蟪绦蛟O(shè)計(jì)時(shí),才會有對象這個(gè)概念,而在面向過程型程序設(shè)計(jì)時(shí),我們討論最多的就是數(shù)據(jù)類型。
Python提供的基本數(shù)據(jù)類型主要有:布爾類型、整型、浮點(diǎn)型、字符串、列表、元組、集合、字典等… …
數(shù)據(jù)類型也可以看做是一個(gè)”類“
每一種數(shù)據(jù)類型都是一個(gè)對象,也具有其自己的屬性和方法
Python中的None與 NULL(即空字符)的區(qū)別
None是Python的特殊類型,NoneType對象,它只有一個(gè)值None.
它不支持任何運(yùn)算也沒有任何內(nèi)建方法。
None和任何其他的數(shù)據(jù)類型比較永遠(yuǎn)返回False。
None有自己的數(shù)據(jù)類型NoneType。
你可以將None復(fù)制給任何變量,但是你不能創(chuàng)建其他NoneType對象。
是不同的一種數(shù)據(jù)類型:
>>>type(None)
class 'NoneType'>
表示該值是一個(gè)空對象,空值是Python里一個(gè)特殊的值,用None表示。None不能理解為0,因?yàn)?是有意義的,而None是一個(gè)特殊的空值。
>>>type('')
class ''str'>
你可以將None賦值給任何變量,也可以將任何變量賦值給一個(gè)None值的對象
判斷的時(shí)候 均是False
>>> ff=None
>>> if ff:
print('ff is define')
執(zhí)行結(jié)果:無打??!
屬性不同
使用dir()函數(shù)返回參數(shù)的屬性、方法列表。如果參數(shù)包含方法dir(),該方法將被調(diào)用。如果參數(shù)不包含dir(),該方法將最大限度地收集參數(shù)信息。
dir(None)
['__bool__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
dir('')
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
python 中is和= = 的區(qū)別
Python中的對象包含三要素:id、type、value,其中id用來唯一標(biāo)識一個(gè)對象,type標(biāo)識對象的類型,value是對象的值。
is判斷的是a對象是否就是b對象,是通過id來判斷的;
==判斷的是a對象的值是否和b對象的值相等,是通過value來判斷的。
python中的not代表什么
在python中not是邏輯判斷詞,用于布爾型True和False,not True為False,not False為True.
pythond對變量是否為None的判斷
python對變量是否為None的判斷,有三種主要的寫法:
第一種是if x is None;
第二種是 if not x:;
第三種是if not x is None(這句這樣理解更清晰if not (x is None)) 。
在Python中 None, False, 空字符串”“, 0, 空列表[], 空字典{}, 空元組()都相當(dāng)于False 。
strong>not None == not False == not '' == not 0 == not [] == not {} == not ()/strong>
foo is None 和 foo == None的區(qū)別
>>> class foo(object):
def __eq__(self, other):
return True
>>> f = foo()
>>> f == None
True
>>> f is None
False
>>> list1 = [1, 2, 3]
>>> list2 = [1, 2, 3]
>>> list1==list2
True
>>> list1 is list2
False
另外:
(ob1 is ob2) 等價(jià)于 (id(ob1) == id(ob2))
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:- python數(shù)據(jù)類型相關(guān)知識擴(kuò)展
- 一篇文章帶你搞懂Python類的相關(guān)知識
- 用 Python 元類的特性實(shí)現(xiàn) ORM 框架
- 詳細(xì)總結(jié)Python類的多繼承知識
- python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類
- Python-typing: 類型標(biāo)注與支持 Any類型詳解
- Python進(jìn)階學(xué)習(xí)之帶你探尋Python類的鼻祖-元類
- python中必會的四大高級數(shù)據(jù)類型(字符,元組,列表,字典)
- Python如何把不同類型數(shù)據(jù)的json序列化
- Python基礎(chǔ)之元類詳解
- Python入門學(xué)習(xí)之類的相關(guān)知識總結(jié)