Python 判断网络是否正常及代码修改

def isConnected(self):
    try:
        requests.get("http://www.baidu.com", timeout=2)
    except:
        print("网络异常")
        time.sleep(10)
        return False
    return True

 

def checking(self): # 一直检测是否有断网,若是断网则从新链接
    while 1:
        try:
            if self.isConnected():
                self.adb_install()
        except:
            time.sleep(10)

 

def adb_install(self):
    try:
        print("正在安装...")
    except:
        self.checking()

 

  • 最近想给自己的下载脚本添加一个网络判断的功能,于是在网上搜到了这段代码,于是就走上了改这段代码的bug的路上越走越远…🤦‍♀️
  • 先说一个需要注意的,就是adb_install的主函数的try需要包括这个函数的所有代码,否则会进入网络判断出来后,还会执行剩下的代码;
  • 第二点,这串代码最奇葩的点,还有个死循环;在checking函数里面while 1进入循环后没有任何情况跳出循环,沿江东路站到了🚌
    修改后:
   def checking(self):    # 一直检测是否有断网,若是断网则从新链接
        while 1:
            if self.isConnected():
                self.adb_install()
                break

 

  • 第三点,更更奇葩的点,是这段代码没有判断错误,不论任何错误都进入了判断网络,而不论什么错误都会返回网络异常;一切手动停止的操作也会进入网络错误而循环…
    修改后(把指定错误抛出):
def isConnected(self):
        try:
            requests.get("http://www.baidu.com/", verify=False, timeout=1)
        except requests.exceptions.ReadTimeout:
            print("连接超时,10s后重试")
            time.sleep(10)
            return False
        except requests.exceptions.ConnectionError:
            print("网络异常,10s后重试")
            time.sleep(10)
            return False
        return True

 

  • 为了解决在任何时刻都可能执行手动停止,我灵光一现,想到了装饰器👏
   def Interrupt_exception(func):
        def wrapper(*args, **kwargs):
            try:
                func(*args, **kwargs)
            except KeyboardInterrupt:
                print("手动停止")
                os._exit(0)
        return wrapper

 

  • 修改完之后,发现代码一旦进入checking就会一直进入网络异常,发现用了装饰器后没有返回执行checking的值,加上:
   def Interrupt_exception(func):
        def wrapper(*args, **kwargs):
            try:
                result = func(*args, **kwargs)
                return result
            except KeyboardInterrupt:
                print("手动停止")
                os._exit(0)
        return wrapper

 

  • 以上,大概代码修改完成,其他优化。
posted @ 2022-05-22 23:39  青山原  阅读(657)  评论(0编辑  收藏  举报