arvydas / blinkstick-python

BlinkStick Python interface to control devices connected to the computer
Other
134 stars 52 forks source link

Please implement Exceptions for better Error handling #63

Open henryruhs opened 4 years ago

henryruhs commented 4 years ago

Hello,

it would be nice to have some exceptions to be thrown:

  1. Connection failed while using blinkstick.connect() should throw BlinkStickConnectionException

Hacky solution that includes general OSError to catch pointless find_all() call:

    api = None

    try:
        from blinkstick import blinkstick

        try:
            api = blinkstick
            api.find_all()
        except OSError:
            exit(wording.get('connection_no').format('AGILE INNOVATIVE BLINKSTICK') + wording.get('exclamation_mark'))
        return api
    except ImportError:
        exit(wording.get('package_no').format('BLINKSTICK') + wording.get('exclamation_mark'))

Wanted solution that throws BlinkStickConnectionException:

def api_factory():
    api = None

    try:
        from blinkstick.blinkstick import BlinkStickConnectionException

        try:
            api = blinkstick
            blinkstick.connect()
        except BlinkStickConnectionException:
            exit(wording.get('connection_no').format('AGILE INNOVATIVE BLINKSTICK') + wording.get('exclamation_mark'))
        return api
    except ImportError:
        exit(wording.get('package_no').format('BLINKSTICK') + wording.get('exclamation_mark'))

Connect method could look similar to this:

def connect(vendor_id : str, product_id : str) -> None:
    try:
        hidraw = hid.device(vendor_id, product_id)
        hidraw.open(vendor_id, product_id)
        hidraw.close()
    except OSError:
        raise BlinkStickConnectionException
rakshak-t commented 3 years ago

I second this. The exceptions being thrown are utterly unhelpful.