目次
1. None’i tähtsus Pythonis
Pythonis onNone
eriline objekt, mida kasutatakse tähistamaks “mitte midagi”. See vastab teiste programmeerimiskeelte null
või nil
väärtustele, kuid omab Pythonile omaseid omadusi. Näiteks kasutatakse None
siis, kui funktsioon ei tagasta selgesõnaliselt väärtust või kui muutujale ei määrata initsialiseerimisel väärtust.None’i kasutusviisid
- Muutuja initsialiseerimisel tähistab “väärtus puudub”
- Kasutatakse, kui funktsioon ei tagasta väärtust
- Tingimustes saab kontrollida, kas muutuja on
None
, et vältida vigu
None
loogiline väärtus on False
. Kui None
kontrolli ei tehta õigesti, võib seda segi ajada teiste tühjade objektidega, nagu tühi string või tühi list, mis võib põhjustada ootamatuid vigu.2. Erinevus None ja teiste tühjade objektide vahel
Pythonis erinevadNone
ja tühjad objektid (näiteks tühi string ""
või tühi list []
). None
tähendab, et väärtus puudub täielikult, samas kui tühi objekt tähendab, et objektil on tüüp, kuid tal pole elemente. Nende erinevuste mõistmine ja õige kontroll on vea vältimiseks hädavajalik.Tühja stringi ja None’i erinevus
empty_string = ""
if empty_string is None:
print("See on None")
else:
print("See on tühi string")
Ülaltoodud koodis on empty_string
tühi string, mitte None
. Tühi string tähendab, et väärtus on olemas, kuid see on tühi.None ja tühi list andmebaasi päringutes
Näiteks võib andmebaasi päringu tulemusena tagastuda kasNone
või tühi list []
, mis põhjustab programmi erineva käitumise. None
viitab sellele, et andmeid ei eksisteeri, mis võib vajada vea- või korduvkäivituse käsitlemist. Tühi list tähendab aga lihtsalt, et vasteid ei leitud, ja programm võib jätkata normaalset töötlemist.
3. None’i kontrollimine (is vs ==)
Pythonis saabNone
kontrollida is
ja ==
operaatoriga. Kuid Pythoni ametlik dokumentatsioon ja parimad praktikad soovitavad kasutada is
, sest is
kontrollib objekti “identiteeti”, samal ajal kui ==
kontrollib “võrdsust”. Seetõttu on is
kasutamine objekti täpseks kontrollimiseks tõhusam ja kindlam.Miks kasutada is
is
on parim viis kontrollida, kas objekt on täpselt None
. Näiteks kui klass on üle kirjutanud __eq__
meetodi, võib ==
anda ootamatuid tulemusi. Alljärgnevas näites näidatakse erinevust is
ja ==
vahel.class Foo:
def __eq__(self, other):
return True
name = Foo()
print(name == None) # True
print(name is None) # False
Selles näites tagastab name == None
True
, kuid name is None
tagastab False
. Seega annab is
alati täpse tulemuse.4. Praktiline näide: None’i kontroll funktsioonis
Kui funktsiooni tagastusväärtus või API vastus onNone
, on selle õige käsitlemine väga oluline. Järgmine näide näitab tüüpilist viisi, kuidas funktsioonis None
kontrollida.None’i kontroll funktsioonis
def check_value(val):
if val is None:
return "Väärtust ei eksisteeri"
return "Väärtus on olemas"
print(check_value(None)) # "Väärtust ei eksisteeri"
print(check_value(10)) # "Väärtus on olemas"
See funktsioon kontrollib, kas argument on None
. Kui väärtus puudub, tagastatakse teade “Väärtust ei eksisteeri”. Nii saab vältida vigu ja ootamatuid tulemusi.API vastuse None’i kontroll
Veebirakendustes võib API vastuseks ollaNone
. Selle korrektne kontrollimine ja vea käsitlemine aitab säilitada rakenduse stabiilsust.response = fetch_data_from_api()
if response is None:
print("Andmeid ei õnnestunud hankida")
else:
process_data(response)
Kui API vastus on None
, on soovitatav kuvada veateade või rakendada muid meetmeid.
5. Tähelepanekud ja parimad praktikad None’i kontrollimisel
None
on võimas funktsioon, kuid vale kasutus võib põhjustada vigu. Eriti oluline on mitte käsitleda None
’i samaväärselt teiste objektidega, sest see võib viia ootamatu käitumiseni.Veakäsitluse olulisus
KuiNone
’i ei käsitleta õigesti, võivad tekkida vead, näiteks:def func2(i):
print(fruits.get(i).upper()) # Kui tagastatakse None, tekib viga
func2(5) # AttributeError: 'NoneType' object has no attribute 'upper'
Selles koodis tagastab None
meetodi get()
puhul ja upper()
kutse põhjustab vea. Selle vältimiseks tuleb enne None
kontrollida.Parimad praktikad
- Kasuta alati
is None
võiis not None
kontrolli - Kui funktsioon tagastab
None
, teosta selgesõnaline veakäsitlus - Erista
None
teistest tühjadest objektidest
6. Kokkuvõte: None’i kontrolli rakendamine ja kasutamine
Selles artiklis käsitlesimeNone
kontrollimist Pythonis ja selle rakendamist. None
mängib olulist rolli vigade vältimisel ja tingimusloogikas. Eriti oluline on eristada None
teistest tühjadest objektidest ning kasutada sobivaid meetodeid kontrollimiseks, et suurendada programmi stabiilsust. Tulevases arenduses kasuta None
kontrolli API vastuste ja andmebaasi päringute puhul, et luua veakindlaid rakendusi.