Python Forum

Full Version: try catch not working?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello,
I have this code for checking modem connection

import os
import sys
import time
import datetime
import requests
import threading
import socket
import netifaces as ni
import schedule

Error_Count = 0

def get_ip_address():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(("8.8.8.8", 80))
    return s.getsockname()[0]


def CheckConnection():
    #threading.Timer(60.0, CheckConnection).start() # called every minute
    global Error_Count
    address_check = '8.8.8.8'
    response = os.system('ping -c 2 ' + address_check)
    if response == 0:
        pingstatus = "Network Active"
        print(pingstatus, "count: ", str(Error_Count))
    else:
        print(f'Count is {Error_Count}')
        if Error_Count == 3:
            #os.system('sudo shutdown -r now')
            print('put here reboot command if nothing works , need to check remove route maybe$
            Error_Count = 0
        else:
            errorTime = datetime.datetime.now()
            pingstatus = (str(errorTime) + " : Netwrok Down!")
            OutInterface = get_ip_address()
            print('trying to go out using : ' + OutInterface)
            time.sleep(2)
            try:
                boot_response = os.system('bash /bin/modem_reset >> /home/pi/logs/modem_restar$
            except Exception as e2:
                print(e2)
            print(str(boot_response) + '\n\r Modem shoud be up , see IP')
            time.sleep(5)
            # ni.ifaddresses('wwan0')
            try:
                Wan_ip = ni.ifaddresses('wwan0')[ni.AF_INET][0]['addr']
            except ValueError as ve1:
                print(ve1)
                Wan_ip='x.x.x.x'
            else:
                print('Wan ip - ', Wan_ip)
            try:
                Vpn_ip = ni.ifaddresses('tun0')[ni.AF_INET][0]['addr']
            except ValueError as ve:
                print(ve)
                Vpn_ip='y.y.y.y'
            else:
                print('vpn ip - ', Vpn_ip)
            Error_Count += 1
    #return pingstatus

#threading.Timer(60.0, CheckConnection).start() # called every minute
schedule.every(1).minutes.do(CheckConnection)

while True:
    schedule.run_pending()
    time.sleep(1)
whenever he get to the try-catch for printing wan_ip - I get this error

 File "/home/pi/Documents/CheckConnection_new1.py", line 69, in <module>
    schedule.run_pending()
  File "/usr/local/lib/python3.7/dist-packages/schedule/__init__.py", line 780, in run_pending
    default_scheduler.run_pending()
  File "/usr/local/lib/python3.7/dist-packages/schedule/__init__.py", line 100, in run_pending
    self._run_job(job)
  File "/usr/local/lib/python3.7/dist-packages/schedule/__init__.py", line 172, in _run_job
    ret = job.run()
  File "/usr/local/lib/python3.7/dist-packages/schedule/__init__.py", line 661, in run
    ret = self.job_func()
  File "/home/pi/Documents/CheckConnection_new1.py", line 47, in CheckConnection
    Wan_ip = ni.ifaddresses('wwan0')[ni.AF_INET][0]['addr']
KeyError: 2
and it's finish the code
why ?
what did I do wrong , and why the code won't continue ?
maybe because the
schedule.run_pending()
not in try-catch also ?

Thanks,
You are catching ValueError exceptions, but the program is raising a KeyError.
Ok
I will catch it and see what cause it .

meanwhile (until it will catch the error again):
can it be because I don't get addr in the response?

Thanks ,