Jason. Cała informatyka w jednym miejscu!

Przechodzicie do nauki języka Python z innego języka programowania? Z pewnością niejeden raz popełnialiście pewne błędy składniowe których trudno się trzymać przychodząc z jakiegoś innego języka wysokiego poziomu. Początkujący mają jeszcze gorzej, gdyż nie dosyć że Python ma swoje zasady, to trzeba jeszcze uważać na pozostałą gamę pułapek niewidocznych na pierwszy rzut oka. Poznajcie 8 najczęściej popełnianych błędów jakie możemy popełnić w Pythonie (oraz tych przychodzących od innych języków, jeśli już przerobili wstępnie programowanie) i sprawdźcie czy mówimy o tych samych.

8 NAJCZĘŚCIEJ POPEŁNIANYCH BŁĘDÓW SKŁADNIOWYCH

To nie będzie z pewnością cała długa lista "grzeszków" zostawianych przez ludzi bez względu na to, czy te częste błędy w Pythonie są duże, czy małe. Artykuł ten będzie miał raczej na celu przykucie większej uwagi na niektóre szczegóły, których nie ma w większości języków programowania, a są one tutaj, w Pythonie (przecież to nie Wasza wina). Sam miałem z tym nie lada problem, żeby się "przestawić", aczkolwiek jest to obowiązek, bo błąd składniowy nie uruchomi nam kodu źródłowego.

Oto 8 najczęściej popełnianych błędów w Pythonie jakie dotykają zarówno początkujących, jak i ludzi będących po innym języku.

#1: BRAK DWUKROPKA W INSTRUKCJI WARUNKOWEJ / NAGŁÓWKU FUNKCJI

Klasyka. W Pythonie obowiązuje postawienie znaku dwukropka w momencie definiowania instrukcji warunkowej lub funkcji. Jeśli o nim zapomnicie, "invalid syntax" szybko Wam o tym przypomni, nie bójcie się:

if x == 16:	# <== nie zapomnij wstawić znaku dwukropka!
	# dowolne instrukcje

def own_function():	# <== nie zapomnij wstawić znaku dwukropka!
	# dowolne instrukcje

#2: BRAK NAWIASÓW OKRĄGŁYCH PO PODANIU NAZWY FUNKCJI CELEM JEJ WYWOŁANIA

Początkującym zdarza się utożsamiać zasady "wspominania" o zmiennych z funkcjami. Tyle tylko, że o ile zmienna posiada tylko swoją etykietę (nazwę), tak funkcja dysponuje też parą nawiasów okrągłych, gdyż może (ale nie musi) przyjmować jakieś parametry formalne osadzone w jej nagłówku. To co prawda nie jest de facto błąd składniowy (funkcja sama w sobie zwraca adres w pamięci komputera), aczkolwiek może to mieć późniejsze konsekwencje przy funkcjonowaniu programu, bo nagle czegoś zabraknie albo pojawi się coś niepożądanego. Dlatego to wstawiłem w niniejsze 8 najczęściej popełnianych błędów w Pythonie.

Wywoływanie funkcji bez pary nawiasów w Pythonie (jeden z 8 najczęściej popełnianych błędów)

Wywołując funkcję trzeba podać parę nawiasów okrągłych, nawet jeśli nie przyjmuje ona żadnych parametrów!

Adres funkcji w Pythonie

Podanie samej nazwy funkcji zwróci jej lokalizację w pamięci jako adres w systemie heksadecymalnym.

#3: POMYLENIE OPERATORA PORÓWNANIA Z OPERATOREM PRZYPISANIA

Znam to doskonale, jedna z najbardziej perfidnych pomyłek mogących się zaczaić w kodzie źródłowym. Państwo drodzy, pojedynczy znak równości (=), a dwa znaki równości (==) to NIE są te same operatory!

Pierwszy z nich określany jest jako "operator przypisania" i korzystamy z niego wówczas, gdy przypisujemy nową wartość zmiennej. Drugi to "operator porównania" i jest on wykorzystywany w instrukcjach warunkowych i wartościach logicznych do porównywania ze sobą dwóch wartości (zmiennych albo stałych). W tym języku i tak macie dobrze, bo interpreter zaraz Wam wyświetli "invalid syntax".

Zdarza się też, że niektórzy podchodzą do zapisów matematycznie. Jeżeli chcecie dobrze opanować programowanie, musicie odsunąć na bok królową nauk bo to, co w matematyce zapisalibyście w postaci: "2 < x < 10", to w kodzie źródłowym zostanie uznane za bzdurę. Wśród 8 najczęściej popełnianych błędów, temu wstawiłbym numerek jeden co do częstotliwości występowania.

#4: KORZYSTANIE Z METOD MODUŁU BEZ JEGO ZAIMPORTOWANIA

Następna rzecz dotykająca początkujących. Wywołują od razu metodę znajdującą się w jakimś module bez wcześniejszego importu modułu, a interpreter informuje, że nie ma zielonego pojęcia o jaką metodę chodzi. Moduły zostały stworzone po to, aby nie dokładać tony funkcji, które mogą EWENTUALNIE okazać się przydatne. To tak apropos, gdyby ktoś się pytał czy nie byłoby prościej wrzucić wszystkiego do jednego worka jak leci.

#5: LITERÓWKI W NAZWACH MODUŁÓW LUB ICH METOD

Jeszcze jeden błąd w kategorii czepiania się o bzdety. Niestety, takie śmieszne rzeczy jak literówki też gotowe są uprzykrzyć nam życie. Jeżeli ujrzycie wyjątek "ModuleNotFoundError", macie literówkę w importowanym module. Jeżeli "name 'X' is not defined", pokręciliście nazwę metody pobieranej z modułu:

import ranom	# powinno być "random"!

x = random.randint(1, 10)

#6: ŁAŃCUCH ZNAKÓW BEZ CUDZYSŁOWÓW

Też drobnostka, prawda? Ile razy pisało się z rozpędu tekst nieopatrzony żadnymi cudzysłowami po bokach i dziwiło się czemu traktuje się nasz kod jak trędowaty? Bez względu na język, każdy łańcuch znaków wymaga symbolu "startu" i "końca", żeby język "wiedział" do którego znaku traktować tekst jak łańcuch, a resztę jak dalszą część kodu. W Pythonie macie jeszcze do dyspozycji apostrofy. To powinno występować jak najrzadziej wśród 8 najczęściej popełnianych błędów, gdyż o ile korzystamy z dowolnego IDE, kolor tekstu już da wyraźnie do zrozumienia co jest tekstem, a co jest kodem:

txt_a = "To ma być traktowane jak łańcuch znaków."
txt_b = 'To również ma być "łańcuchem"!'

#7: BRAK WCIĘCIA DLA NOWEGO BLOKU KODU

Kolejny błąd, który w innym języku można by nazwać "dekoracją". W Pythonie, wcięcia nie robi się na pokaz, żeby uczynić kod piękniejszym (choć faktycznie wygląda to lepiej i to jest akurat dobre, żeby wymuszać pisanie czytelniejszego kodu). Tworzycie instrukcje warunkowe czy funkcje? Musi się pod spodem znaleźć wcięcie w postaci nawet choćby pojedynczej spacji. Chwila nieuwagi i "expected an indented block" pojawi się natychmiastowo :)!

if x == 16:
    # wymagane wcięcie (spacja albo Tab)!

#8: BRAK KONWERSJI NA WŁAŚCIWY TYP DANYCH

Następny szczegół mogący uciec człowiekowi z pola widzenia. Mamy zmienną, porównujemy to z wartością o innym typie i jest klops. My wiemy co chcemy zrobić tylko problem polega na tym, że interpreter też musi doskonale wiedzieć co ma robić:

x = "15"

if x == 15:
    # dowolne instrukcje

Tutaj wyjątkowo łatwo można się zagalopować zwłaszcza w sytuacji korzystania z funkcji "input". Większość na początku zapomina, że zwraca ona łańcuch znaków, a później w instrukcjach warunkowych próbujemy porównać łańcuch do innego typu np. do liczby. Wiem, że intuicja robi swoje, lecz trzeba konwertować na właściwy typ danych jeśli chcemy "dogadać się" z Pythonem. Sugeruję od razu "obejmować" całe wywołanie powyższej funkcji w drugą funkcję konwertującą na pożądany przez nas typ danych. Wtedy wszystko będzie w porządku, choć program nie będzie odporny na wartości niebędące liczbami całkowitymi (zgłosi wyjątek kiedy wartość będzie innego typu):

int_value = int(input("Podaj dowolną liczbę całkowitą: "))

Oto moim zdaniem 8 najczęściej popełnianych błędów z jakimi możecie mieć do czynienia podczas uczenia się Pythona. Życzę Wam, abyście potknęli się o nie jak najmniej razy w swoim życiu :D.

PODOBNE ARTYKUŁY