yoklateknik mülakat

Backend Python Errors Context Mülakat Soruları

75 doğrulanmış Backend Python Errors Context mülakat sorusu — cevaplarıyla çöz, açıklamalarıyla öğren, gerçek simülasyonda kendini test et.

Gerçek simülasyonu dene →

Örnek sorular

Python Errors ContextZorluk 2
try:
    int("abc")
except Exception:
    print("A")
except ValueError:
    print("B")

Bu kod çalıştığında ne olur?
  • a"B" yazdırılır, çünkü ValueError daha spesifik bir istisna tipidir ve Python her zaman önce en spesifik except bloğunu eşleştirir
  • bPython, daha spesifik bir except bloğu daha genel olandan sonra geldiği için tanım anında SyntaxError fırlatır
  • c"A" yazdırılır: eşleşen ilk except bloğu (Exception) işi yapar, bu yüzden aşağıdaki ValueError bloğu erişilemez hale gelir ama kendisi hata değildir
  • dHem "A" hem "B" yazdırılır, çünkü Python fırlatılan istisnanın tipiyle eşleşen her except bloğunu, önceki eşleşmeler fark etmeksizin kaynak sırasına göre bir kez çalıştırarak değerlendirir
Açıklama:except blokları yukarıdan aşağıya denenir ve tipi (isinstance/issubclass ile) eşleşen ilk blok kazanır — yalnızca bir tanesi çalışır. ValueError, Exception'ın alt sınıfı olduğu için ilk blok onu yakalar ve "A" yazdırılır; ikinci blok ölü kod haline gelir. Python bu sıralama sorununu SyntaxError olarak algılamaz (yalnızca çıplak except: en sonda olmak zorundadır).
Python Errors ContextZorluk 1
Bir try/except/finally bloğunda, finally içindeki kod ne zaman çalışır?
  • aHer zaman, istisna fırlatılsın ya da fırlatılmasın, try bloğu erken return etse bile
  • bYalnızca bir istisna fırlatılıp eşleşen bir except bloğu tarafından yakalandığında
  • cYalnızca try bloğunda istisna fırlatılmadığında, çünkü finally her yolda koşulsuz çalışmak yerine başarılı bir else dalını tamamlamak için tasarlanmıştır
  • dYalnızca istisna yakalanmadan fonksiyon dışına yayıldığında
Açıklama:finally, try/except yapısından çıkışın her yolunda çalışması garanti edilir: normal tamamlanma, yakalanan istisna, yakalanmayan istisna ya da try/except içindeki bir return/break/continue durumu. Özellikle koşulsuz temizlik kodu çalıştırmak için vardır.
Python Errors ContextZorluk 2
def parse(s):
    try:
        n = int(s)
    except ValueError:
        return None
    else:
        n *= 2
    finally:
        print("done")
    return n

print(parse("5"))

Ne yazdırılır?
  • a"done" yazdırılır, sonra None döner, çünkü else bloğu n'nin değerini etkilemez
  • bValueError fırlatılır, çünkü int("5")'in try içinde başarılı olması else bloğunun çalışmasına izin vermez
  • cBu çalıştırmada hiçbir şey yazdırılmaz, çünkü "done" yalnızca int(s)'in istisna fırlattığı ve kontrolün except bloğuna atladığı dalda görünür
  • d"done" yazdırılır, sonra 10 döner, çünkü istisna oluşmadığında else bloğu çalışır ve finally çalışmadan önce n'yi ikiye katlar
Açıklama:int("5") başarılı olur, bu yüzden except atlanır ve else çalışarak n'yi 10 yapar. finally her zaman sonra çalışır ve "done" yazdırır. try/except içinde erken bir return olmadığından, akış return n'ye düşer ve 10 döner.
Python Errors ContextZorluk 2
Bir geliştirici, eksik bir anahtara karşı korumak için value = config["timeout"] satırını try/except IndexError içine sarıyor. "timeout" config'te bulunmadığında ne olur?
  • aIndexError fırlatılır, çünkü eksik bir dict anahtarına erişmek de IndexError fırlatır, bu yüzden except bloğu durumu doğru şekilde işler
  • bKeyError fırlatılır, ki bu except IndexError tarafından yakalanmaz, bu yüzden istisna fonksiyon dışına yakalanmadan yayılır
  • cHiçbir şey fırlatılmaz; eksik bir dict anahtarı sessizce None olarak değerlendirilir
  • dPython AttributeError fırlatır, çünkü dict erişimi anahtarın zaten bir öznitelik olarak var olmasını gerektirir
Açıklama:Eksik dict anahtarları IndexError değil KeyError fırlatır (IndexError, list/tuple gibi sıralı yapılarda aralık dışı indeksleme içindir). KeyError, IndexError'ın alt sınıfı olmadığından except bloğu eşleşmez ve istisna yayılır.
Python Errors ContextZorluk 1
Python'ın yerleşik istisna hiyerarşisi hakkında hangi ifade doğrudur?
  • aZeroDivisionError ve ArithmeticError ilişkisiz sınıflardır; birini yakalamak diğerini asla yakalamaz
  • bZeroDivisionError, ArithmeticError'ın alt sınıfıdır, bu yüzden except ArithmeticError bir ZeroDivisionError'ı da yakalar
  • cArithmeticError, ZeroDivisionError'ın alt sınıfıdır
  • dİkisi de BaseException'ın doğrudan alt sınıfıdır ve ortak bir üst sınıfları yoktur
Açıklama:Python'ın yerleşik istisnaları bir hiyerarşi oluşturur: ZeroDivisionError, ArithmeticError'dan miras alır, o da Exception'dan miras alır. Üst sınıf ArithmeticError'ı yakalamak, ZeroDivisionError ve OverflowError dahil tüm alt sınıflarını da yakalar.
Python Errors ContextZorluk 3
def validate(n):
    try:
        if n < 0:
            raise ValueError("negative")
    except ValueError:
        print("logging")
        raise

try:
    validate(-1)
except ValueError as e:
    print(f"caught: {e}")

Ne yazdırılır?
  • aRuntimeError fırlatılır, çünkü çıplak bir raise, çağrı yığınında aktif bir istisna işleme bağlamının dışında göründüğünde açık bir argüman gerektirir
  • bYalnızca "logging" yazdırılır; çıplak raise istisnayı yutar, bu yüzden dıştaki except hiç tetiklenmez
  • cYalnızca "caught: negative" yazdırılır; "logging" bastırılır çünkü raise print etkili olmadan önce gerçekleşir
  • d"logging" sonra "caught: negative" yazdırılır, çünkü bir except bloğu içindeki çıplak raise, o an işlenmekte olan istisnayı değiştirmeden yeniden fırlatır
Açıklama:Bir except bloğu içinde, argümansız çıplak raise, o an işlenmekte olan istisnayı tipini, değerini ve traceback'ini koruyarak yeniden fırlatır. Bu yüzden önce "logging" yazdırılır, ardından aynı ValueError dıştaki try'a yayılır, o da yakalar ve "caught: negative" yazdırır.

3300 soruluk Backend bankasında kendini sına.

Mülakata başla