15 Ocak 2015 Perşembe

Python'da Kullanıcı Tanımlı Hatalar

    Python projelerinde kullanıcılar hata tanımlayabilir ve aynı sistem tarafından tanımlı hatalar gibi try-except içinde kullanabilir.

    Ben pebble-remote projesini geliştirirken bu hata yakalama kısmında şöyle bir sorunla karşılaşmıştım. Kullanıcı tanımlı hata sınıflarım vardı ve bu sınıfların tanımlandığı dosyanın dışında bir yerde bu tanımlanan hataları yakalamak istiyordum. Hatanın tanımlandığı python dosyasını da import ettiğim halde bu hataları yakalayamıyordum.

   Daha iyi bir yöntemi de olabilir elbet ama benim deneyerek bulduğum çözüm hata sınıfının tam yolunu yazmak oldu.

Kullanmaya çalıştığım python modülünün yapısı aşağıda:

libpebble/pebble
├── __init__.py
├── LightBluePebble.py
├── pebble.py
└── stm32_crc.py

LightBluePebble.py dosyası içinde bir hata aşağıdaki gibi tanımlanmış:
LightBluePebbleError(Exception):
    def __init__(self, id, message):
        self._id = id
        self._message = message
    def __str__(self):
        return "%s ID:(%s) on LightBlue API" % (self._message, self._id)
Bu hatayı yakalamak istediğim dosya içinde  içinde modülü aşağıda şekilde import ettim:
import pebble as libpebble
Bu haliyle aşağıdaki kod hatalıydı:
try:
    ...
except LightBluePebbleError as e
    ...
Doğrusu:
LightBluePebbleError = libpebble.LightBluePebble.LightBluePebbleError

try:
    ...
except LightBluePebbleError as e
    ...