Hata Mesajı Sorunu

    try:
        process = int(input("Yapacağınız işlemi seçiniz: "))
    except ValueError as Hata:
        print("Sadece sayı giriniz.")

Şurada ilk seferde string bir değer girince

if process == 1:

bu kodda takılıyor ve şu hatayı veriyor:

Traceback (most recent call last):
  File "/home/kaninbc/d3_1.py", line 304, in <module>
    if process == 1:
NameError: name 'process' is not defined

Ancak ilk seferde if-else de olmayan integer bir değer girince, ikinci turda string bir değer girince bir sorun oluşmuyor ve else’ye geçiyor.

Hani?, Ben göremiyorum?(yazar burada bütün kodları buraya atmanızı istediğini anlatmaya çalışmış :))

1 Beğeni

O kadarını da anlarsınız işte;

if process = 1:
   print('1')
elif process == 2:
   print('2')
else:
   print('3')

… Böyle gider. Kişi bildiği bişeyi neden sorar ki?
Kodun devamı veya içeriği ilgilendirmiyor. Buradaki hata if’te takılması…

Bu arada evet oradaki if process == 1: olmalıymış. (Kodda doğru)

Kişi soru sorarken neden düzgün soru sormaz ki?

Haklısın, bütün kodu demişim(olayın sadece birkaç satırlık bir şey olduğunu müneccimledim de, yani orada da haksızsız(tavir yonunden), yani orada haklısın(fikir yönünden)) en azından process içeren kısmını verebilirdin. Örneğin(görünmesini istemediğin kısımları temsilen: […]):

[...] # birtakım işlemler
try:
    [...] # birtakım işlemler
    p = int(input())
    [...] # birtakım işlemler
except:
    [...] # birtakım işlemler
    print("hata")
    [...] #birtakım işlemler

[...] # birtakım işlemler
if <statement>:
    print(p)

[...] #birtakım işlemler

O zaman niye sordun ki?

Özet:
bir kod verilmiş ortada hayalet bir process uçuşuyor ama gönderilen kodda esamesi okunmuyor, nasıl kod istemeyeyim? İnan istersem hiç uğraşmazdım, ama bir kişiye de olsa faydalı olmak istiyorum. Bu tepki hoş değil, ben senin kotuluğune istemedim process li kodu.

Sana olasılıkları yazayım sen ona göre değerlendir:

olasılık 1:

try:
    p = int(intput())
except:
    print("A error occurred")

if process = 1:
   print('1')
elif process == 2:
   print('2')
else:
   print('3')

olasılık2:

if process = 1:
   print('1')
elif process == 2:
   print('2')
else:
   print('3')

try:
    p = int(intput())
except:
    print("A error occurred")

Neyse Çözüme odaklanalım:

  1. ya while mekanizması kullanınız.
while 1:
    try:
        p = int(input())
        break
    except:
        print("Sayı giriniz")

if <statement1>:
    ivir zivir

ya da bu şekilde bir şey yapınız

try:
    p = int(input())
    if <statement1>:
        ivir zivir
except:
    print("Sayı giriniz")

except satırının altına şunu eklerseniz sorununuz çözülecektir.

except ValueError as Hata:
    print("Sadece sayı giriniz.")
    process = None

try içerisinde process değeri için girdi alıyorsunuz fakat hata verdiğinde process hala belirlenmemiş oluyor. O yüzden hata neticesinde process için de bir değer atamalısınız.
Veya try’dan önce process için değer atayabilirsiniz.

1 Beğeni

Eyvallah hocam, bunun eklenmesi gerekiyormuş.

1 Beğeni

Burada “anladigimizi” varsayiyorsun,

Burada da bu varsayim uzerinden giderek soru sordugumuz icin kiziyorsun. Oysa ki varsayim yanlis.

Bu da yanlis. Kodun icerigi, o kodun nasil calisacagini, ne hatalar cikartacagini dogrudan etkiliyor. Alinan butun hatalar, kodun iceriginde en az bir yere dogrudan bagli.

Python kodu zaman icinde (“yukaridan asagiya”) aktigi icin once calisan kod sonra calisan kodu etkileyebiliyor. Mesela buradaki “if’e takilma” hatasina neden olan kod bizi ilgilendirmedigini dusundugun ve paylasmadigin aralikta olabilir.

1 Beğeni