|
Podczas nauki Pythona może być trochę skomplikowanie zrozumienie znaczenia komunikatów o błędach w Pythonie. Oto lista niektórych typowych błędów w czasie działania, które powodują awarię programu.
1) Zapomniałem dodać :( na końcu if, elif, else, for, while, class, def def def. Błąd pojawi się w kodzie tak: if spam == 42 print ("Hello!") 2) Użyj = zamiast == (skutkujące "SyntaxError: nieprawidłowa składnia") = jest operatorem przypisania, a == jest równe operacji porównania.Błąd występuje w kodzie w taki sposób: jeśli spam = 42: print ("Hello!") 3) Nieprawidłowe użycie wcięcia. (Skutkuje to "IndentationError:unexpected indent", "IndentationError:unindent does not match any outer indetation level" oraz "IndentationError:expected an indented block") Pamiętaj, że wcięcie jest używane tylko po zdaniach kończących się na: po czym format wcięcia musi zostać przywrócony do poprzedniego formatu. Błąd występuje w kodzie w taki sposób: print ("Hello!") druk("Cześć!") Lub: if spam == 42: print ("Hello!") druk("Cześć!") Lub: if spam == 42: print ("Hello!") 4) Zapominanie o wywołaniu len() w instrukcji for loop (skutkujące "TypeError: obiekt "list" nie może być interpretowany jako liczba całkowita") Zazwyczaj chcesz iterować przez listę lub element ciągu przez indeks, co wymaga wywołania funkcji range(). Pamiętaj, aby zwracać wartość len zamiast zwracać tę listę. Błąd występuje w kodzie w taki sposób: spam = ["kot", "pies", "mysz"] Dla i w zasięgu (spam): Print(spam) 5) Spróbuj zmodyfikować wartość ciągu (skutkując "TypeError: obiekt "str" nie obsługuje przypisania elementów") string jest niezmiennym typem danych, a błąd występuje w kodzie tak: spam = "Mam kota." spam[13] = "r" Print(spam) I naprawdę chcesz to zrobić: spam = "Mam kota." spam = spam[:13] + "r" + spam[14:] Print(spam) 6) Próba łączenia wartości nie-stringowych z stringami (skutkujące "TypeError: Can"t conflicitally "int" object to str) Błąd występuje w kodzie w taki sposób: numEggs = 12 print("Mam " + numEggs + " jajka.") I naprawdę chcesz to zrobić: numEggs = 12 print("Mam " + str(numEggs) + " jajka.") Lub: numEggs = 12 print("Mam %s jajek." % (numEggs)) 7) Zapominanie o umieszczeniu cudzysłowów na początku i końcu ciągu (skutkujące "SyntaxError: EOL podczas skanowania literalu łańcucha") Błąd występuje w kodzie w taki sposób:
druk(Cześć!") Lub: print ("Cześć!) Lub: myName = "Al" print ("Moje imię to " + myName + . Jak się masz?") 8) Błędne zapisywanie nazw zmiennych lub funkcji (skutkujące "NameError: nazwa "fooba" nie jest zdefiniowana") Błąd występuje w kodzie w taki sposób: foobar = "Al" print ("Nazywam się " + fooba) Lub: spam = ruond(4.2) Lub: spam = Runda(4.2) 9) Błędne zapisywanie nazw metod (skutkujące "AttributeError: "str" obiekt nie ma atrybutu "lowerr"") Błąd występuje w kodzie w taki sposób: spam = "TO JEST NAPISANE MAŁYMI LITERAMI." spam = spam.lowerr() 10) Odwołania przekraczają maksymalny indeks listy (skutkujący "IndexError: indeks listy poza zakresem") Błąd występuje w kodzie w taki sposób: spam = ["kot", "pies", "mysz"] print(spam[6]) 11) Używanie wartości klucza słownikowego, która nie istnieje (skutkując "KeyError: 'spam'") Błąd występuje w kodzie w taki sposób: spam = {"kot": "Zophie", "pies": "Bazylia", "mysz": "Wąsy"} print ("Imię mojej zebry to " + spam["zebra"]) 12) Próba użycia słowa kluczowego w Pythonie jako nazwy zmiennej (skutkujące "SyntaxError: nieprawidłowa składnia") Klucz Python nie może być używany jako nazwa zmiennej, błąd występuje w kodzie następującym: class = "algebra" Słowa kluczowe Python3 to: and, as, assert, break, class, continue, def, del, elif, else, except , False, final, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, Prawda, spróbuj, podczas gdy z ustępem
13) Użycie operatorów wartości dodanej w zdefiniowanej nowej zmiennej (skutkujące "NameError: nazwa "foobar" nie jest zdefiniowana") Nie używaj 0 ani ciągów zerowych jako wartości początkowych przy deklarowaniu zmiennych, tak aby zdanie spam += 1 z operatorem samoprzyrastającym było równe spam = spam + 1, co oznacza, że spam musi określić prawidłową wartość początkową. Błąd występuje w kodzie w taki sposób: spam = 0 spam += 42 Jajka += 42 14) Przed definiowaniem zmiennych lokalnych należy użyć zmiennych lokalnych w funkcjach (w tym przypadku istnieje zmienna globalna o tej samej nazwie co zmienna lokalna) (co skutkuje "UnboundLocalError: zmienna lokalna "foobar" referencyjna przed przypisaniem") Użycie zmiennej lokalnej w funkcji o tej samej nazwie co zmienna globalna jest skomplikowane, a zasady użycia są następujące: jeśli coś jest zdefiniowane w funkcji, jeśli jest używane tylko w funkcji, jest to lokalne i odwrotnie. Oznacza to, że nie możesz użyć jej w funkcji jako zmiennej globalnej przed jej zdefiniowaniem. Błąd występuje w kodzie w taki sposób: someVar = 42 def myFunction(): print(someVar) someVar = 100 myFunction() 15) Próba stworzenia listy całkowitoliczbowej za pomocą range() (skutkujące "TypeError: obiekt "range" nie obsługuje przypisywania elementów") Czasem chcesz uzyskać uporządkowaną listę liczb całkowitych, więc range() wydaje się dobrym sposobem na wygenerowanie tej listy. Musisz jednak pamiętać, że range() zwraca "obiekt zasięgu", a nie rzeczywistą wartość listy. Błąd występuje w kodzie w taki sposób: spam = zasięg(10) spam[4] = -1 Może właśnie to chcesz zrobić: spam = list(range(10)) spam[4] = -1 (Uwaga: spam = range(10) działa w Pythonie 2, ponieważ w Pythonie 2 range() zwraca wartość z listy, ale w Pythonie 3 generowany jest powyższy błąd) 16) Nice w ++ lub -- operator samoprzyrostu. (W rezultacie powstała "SyntaxError: nieprawidłowa składnia") Jeśli jesteś przyzwyczajony do innych języków, takich jak C++, Java, PHP itd., możesz spróbować użyć ++ lub -- inkrement i odejmowanie zmiennej. W Pythonie nie ma takiego operatora. Błąd występuje w kodzie w taki sposób: spam = 1 spam++ Może właśnie to chcesz zrobić: spam = 1 spam += 1 17) Zapomniałem dodać parametr własny do pierwszego argumentu metody (co skutkuje "TypeError: myMethod() nie przyjmuje argumentów (1 dany)") Błąd występuje w kodzie w taki sposób: klasa Foo(): def myMethod(): print ("Hello!") a = Foo() a.myMethod()
|