Pythoni None täielik juhend: tähtsus, erinevused ja parimad praktikad

1. None’i tähtsus Pythonis

Pythonis on None 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
Eriti oluline on, et 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 erinevad None 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 kas None 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 saab None 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 on None, 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 olla None. 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

Kui None’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õi is 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äsitlesime None 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.
侍エンジニア塾