|
Python öğrenirken, Python'un hata mesajlarının anlamını anlamak biraz karmaşık olabilir. İşte programınızın çökmesine neden olan bazı yaygın çalışma zamanı hatalarının bir listesi.
1) If, elif, else, for, while, class, def sonuna :( eklemeyi unuttum. Hata şu şekilde kodda gerçekleşir: if spam == 42 print("Merhaba!") 2) == yerine = kullanın (sonuçta "SyntaxError: geçersiz sözdizim" ortaya çıktı) =, atama operatörüdür ve == karşılaştırma işlemine eşittir.Hata şu şekilde kodlarda gerçekleşir: eğer spam = 42: print("Merhaba!") 3) Girintinin yanlış kullanımı. (Sonuç olarak "IndentationError:unexpected indent", "IndentationError:unindent doesn't not matching no outer indetation level" ve "IndentationError:expected an indented block" sonuçları ortaya çıktı) Unutmayın ki girinti yalnızca şu ifadelerle bittiğinden sonra kullanılır, bundan sonra girinti formatı önceki girinti formatına geri dönmelidir. Hata şu şekilde kodlarda gerçekleşir: print("Merhaba!") print("Merhaba!") Veya: if spam == 42: print("Merhaba!") print("Merhaba!") Veya: if spam == 42: print("Merhaba!") 4) for döngü ifadesinde len() çağrısını unutmak (bu nedenle "TypeError: "list" nesnesi tam sayı olarak yorumlanamaz) Genellikle, bir listeyi veya dizi elemanını bir indeks üzerinden yineleme yapmak istersiniz, bu da range() fonksiyonunu çağırmayı gerektirir. Bu listeyi geri vermek yerine len değerini döndürmeyi unutmayın. Hata şu şekilde kodlarda gerçekleşir: spam = ["kedi", "köpek", "fare"] Aralıkta (spam) i için: baskı(spam) 5) Dizinin değerini değiştirmeye çalışın (bu "TypeError: "str" nesnesi öğe atamasını desteklemiyor) Dizi değişmez bir veri türüdür ve hata şu şekilde kodlarda gerçekleşir: spam = "Bir evcil kedim var." spam[13] = "r" baskı(spam) Ve aslında bunu yapmak istiyorsunuz: spam = "Bir evcil kedim var." spam = spam[:13] + "r" + spam[14:] baskı(spam) 6) Dizi olmayan değerleri dizelerle birleştirmeye çalışmak (sonuç olarak "TypeError: "int" nesnesini str'ye örtük olarak dönüştüremeyemiyoruz) Hata şu şekilde kodlarda gerçekleşir: numEggs = 12 print("Var " + numEggs + " eggs.") Ve aslında bunu yapmak istiyorsunuz: numEggs = 12 print("Var " + str(numEggs) + " eggs.") Veya: numEggs = 12 print("%s yumurtalarım var." % (numEggs)) 7) Dizinin başına ve sonuna tırnak işareti koymayı unutmak (bu da "SyntaxError: EOL while taran dize literal" anlamına geliyor) Hata şu şekilde kodlarda gerçekleşir:
print (Merhaba!") Ya da: print("Merhaba!) Ya da: myName = "Al" print("Benim adım " + benim Adım + . Nasılsın?") 8) Değişken veya fonksiyon isimlerinin yanlış yazılması ("NameError: name "fooba" tanımlanmamıştır) Hata şu şekilde kodlarda gerçekleşir: foobar = "Al" print("Benim adım " + fooba) Ya da: spam = ruond(4.2) Ya da: spam = Round(4.2) 9) Metod adlarının yanlış yazılması ("AttributeError: "str" nesnesinin "lowerr" özniteliği yoktur) Hata şu şekilde kodlarda gerçekleşir: spam = "BU KÜÇÜK HARFLE." spam = spam.lowerr() 10) Referanslar liste maksimum indeksini aşıyor (bu "IndexError: list index out of range" anlamına geliyor) Hata şu şekilde kodlarda gerçekleşir: spam = ["kedi", "köpek", "fare"] print(spam[6]) 11) Var olmayan bir sözlük anahtar değeri kullanmak (sonuç olarak "KeyError: 'spam'") Hata şu şekilde kodlarda gerçekleşir: spam = {"cat": "Zophie", "dog": "Basil", "mouse": "Whiskers"} print("Evcil zebramın adı " + spam["zebra"]) 12) Python anahtar kelimesini değişken adı olarak kullanmaya çalışmak (sonuç olarak "SyntaxError: geçersiz sözdizim" ortaya çıkıyor) Python anahtarı değişken adı olarak kullanılamaz, hata şu şekilde kodda gerçekleşir: sınıf = "cebir" Python3 anahtar kelimeleri şunlardır: and, as, assert, break, class, continue, def, del, elif, else, except, False, sonunda, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, Doğru, dene, ama birlikte, teslim ol
13) Tanımlanmış yeni bir değişkende katma değer operatörlerinin kullanılması (bunun sonucunda "NameError: name "foobar" tanımlanmamıştır) Değişkenleri bildirirken başlangıç değeri olarak 0 veya null dizileri kullanmayın; böylece kendi kendine artan operatörü kullanarak spam += 1 cümlesi spam = spam + 1'e eşit olur, bu da spam'in geçerli bir başlangıç değeri belirtmesi gerektiği anlamına gelir. Hata şu şekilde kodlarda gerçekleşir: spam = 0 spam += 42 yumurta += 42 14) Yerel değişkenleri tanımlamadan önce fonksiyonlarda yerel değişkenler kullanın (bu durumda, yerel değişkenle aynı isimde küresel bir değişken vardır) (bu da "UnboundLocalError: local variable "foobar" atanmadan önce referans verilir) Bir fonksiyonda küresel değişkenle aynı isimle yerel değişken kullanmak karmaşıktır ve kullanım kuralları şunlardır: bir fonksiyonda herhangi bir şey tanımlanıyorsa, sadece fonksiyonda kullanılıyorsa yerel olur ve tam tersi. Bu, bir fonksiyonu tanımlamadan önce küresel değişken olarak kullanamayacağınız anlamına gelir. Hata şu şekilde kodlarda gerçekleşir: someVar = 42 def myFunction(): print (someVar) someVar = 100 myFunction() 15) Range() ile tam sayı listesi oluşturmaya çalışmak (bu "TypeError: "range" nesnesi öğe atamayı desteklemiyor) Bazen sıralı bir tam sayı listesi almak istersiniz, bu yüzden range() bu listeyi oluşturmak için iyi bir yol gibi görünüyor. Ancak, range() gerçek liste değerini değil, "aralık nesnesi" döndürdüğünü unutmamalısınız. Hata şu şekilde kodlarda gerçekleşir: spam = menzil(10) spam[4] = -1 Belki de yapmak istediğiniz budur: spam = liste(range(10)) spam[4] = -1 (Not: spam = range(10) Python 2'de çalışır, çünkü Python 2'de range() bir liste değeri döndürür, ancak Python 3'te yukarıdaki hata oluşturulur) 16) ++ veya -- kendi kendine artım operatörü olan nice. ("SyntaxError: geçersiz sözdizim" ortaya çıkıyor) Eğer C++, Java, PHP gibi diğer dillere alışkınsanız, ++ veya -- artış ve bir değişkeni çıkarma yöntemini kullanmayı deneyebilirsiniz. Python'da böyle bir operatör yoktur. Hata şu şekilde kodlarda gerçekleşir: spam = 1 spam++ Belki de senin yapmak istediğin budur: spam = 1 spam += 1 17) Metodun ilk argümanına self parametresini eklemeyi unuttum (sonuç olarak "TypeError: myMethod() argüman almıyor (1 verilmiş)") Hata şu şekilde kodlarda gerçekleşir: sınıf Foo(): def myMethod(): print("Merhaba!") a = Foo() a.myMethod()
|