Oserror wifi internal error

Think I finally nailed this problem.

Think I finally nailed this problem.

Running this test.py:

Code: Select all

import network
from wifi_functions import connect
from wifi_functions import disconnect
import utime


sta_if = network.WLAN(network.STA_IF)   #  create station interface

while True:
    connect()
    utime.sleep(5)
    disconnect()
    print ('disconnected')
    utime.sleep(5)

and my wifi_functions.py

Code: Select all

import network
import utime
import machine
import config


sta_if = network.WLAN(network.STA_IF) # create station interface
ap_if = network.WLAN(network.AP_IF) #  create access-point interface


def connect():
    count = 0


 #  disconnects AP if it is up
    ap_if.active(False) #  de-activate the AP interface

    utime.sleep(1)

    if not sta_if.isconnected():
        print('connecting to hotspot...')
        sta_if.active(True)
        sta_if.ifconfig((config.WiFi_device, '255.255.255.0', config.gateway, '8.8.8.8'))
        sta_if.connect(config.hotspot, config.password)


        while (count < 5):
            count += 1

            if (sta_if.isconnected()):
                count = 0
                print (' network config:', sta_if.ifconfig())
                break

            print ('.', end = '')
            utime.sleep(1)


    if (count == 5):
        try:
            with open('errors.txt', 'a') as outfile:
                outfile.write('failed to connect' + 'n')
        except OSError:
            pass

     #  disconnect or you get errors
        disconnect()

    count = 0 #  reset count

    utime.sleep(1)


def disconnect():

 #  disconnects STA, even if it is not connected
    sta_if.disconnect()  #  This is line 59
    sta_if.active(False)

    utime.sleep(1)

I would get this error:

Code: Select all

MPY: soft reboot
connecting to hotspot...
.....Traceback (most recent call last):
  File "main.py", line 2, in <module>
  File "test.py", line 12, in <module>
  File "wifi_functions.py", line 59, in disconnect
OSError: Wifi Not Started
MicroPython v1.18 on 2022-01-17; ESP32 module with ESP32
Type "help()" for more information.

I guess it is not a surprise that trying to disconnect when you are NOT connected
might be an issue. Re-reading Shards response I thought I would put line 59
in a try … except block.

Code: Select all

def disconnect():
    try:
     #  disconnects STA, even if it is not connected
        sta_if.disconnect()
    except:
        pass
    sta_if.active(False)        
    utime.sleep(1)

Voila!! No more … OSError: Wifi Not Started

When running test.py if you do a Ctrl C during the connection attempt, then another
CtrlD I get:

Code: Select all

MPY: soft reboot
connecting to hotspot...
E (63083) wifi:sta is connecting, return error
Traceback (most recent call last):
  File "main.py", line 2, in <module>
  File "test.py", line 10, in <module>
  File "wifi_functions.py", line 24, in connect
OSError: Wifi Internal Error
MicroPython v1.18 on 2022-01-17; ESP32 module with ESP32
Type "help()" for more information

.
This suggests that:

Code: Select all

sta_if.connect(config.hotspot, config.password)

should be a try … except block. But that was what Shards recommended in the first place!!

I hope this is another step towards getting reliable WiFi access.

Thanks to both of you for your suggestions.

В разделе представлены исключения, которые возникают в результате ошибок, возникающих в ходе взаимодействия приложения Python и операционной системы и являются подклассами OSError.

Содержание:

  • Базовый класс исключений OSError
  • Исключение OS BlockingIOError,
  • Исключение OS ChildProcessError,
  • Исключение OS ConnectionError,
    • Исключение OS BrokenPipeError,
    • Исключение OS ConnectionAbortedError,
    • Исключение OS ConnectionRefusedError,
    • Исключение OS ConnectionResetError,
  • Исключение OS FileExistsError,
  • Исключение OS FileNotFoundError,
  • Исключение OS InterruptedError,
  • Исключение OS IsADirectoryError,
  • Исключение OS NotADirectoryError,
  • Исключение OS PermissionError,
  • Исключение OS ProcessLookupError,
  • Исключение OS TimeoutError.

OSError([arg]):

OSError(errno, strerror[, filename[, winerror[, filename2]]]):

Исключение OSError() возникает, когда системная функция возвращает системную ошибку, включая сбои ввода-вывода, типа таких, как «файл не найден» или «диск заполнен». Не срабатывает для недопустимых типов аргументов или других случайных ошибок.

Вторая форма конструктора устанавливает соответствующие атрибуты. У всех атрибутов по умолчанию None если атрибут не указан. Для обратной совместимости, если переданы три аргумента, атрибут args содержит только 2 кортежа из первых двух аргументов конструктора.

Конструктор часто фактически возвращает подкласс OSError, как описано в исключениях ОС ниже. Конкретный подкласс зависит от конечного значения errno. Это поведение имеет место только при построении OSError напрямую или через псевдоним и не наследуется при создании подклассов.

Аргументы исключения OSError()

:

  • errno — Числовой код ошибки из переменной C errno

  • winerror — В Windows это дает вам собственный код ошибки Windows. Атрибут errno тогда является приблизительным переводом, в терминах POSIX, это нативный код ошибки.

    В Windows, если аргумент конструктора winerror является целым числом, атрибут errno определяется из кода ошибки Windows, а аргумент errno игнорируется. На других платформах аргумент winerror игнорируется, а атрибут winerror не существует.

  • strerror — Соответствующее сообщение об ошибке, предоставленное операционной системой. Он отформатирован функциями языка C perror() под POSIX и FormatMessage() под Windows.

  • filename и filename2 — Для исключений, которые включают путь к файловой системе, например open() или os.unlink(). filename — это имя файла, передаваемое функции. Для функций, которые включают два пути файловой системы, например, os.rename(), filename2 — соответствует второе имя файла, переданное функции.


Исключения подкласса OSError.

Ниже перечисленные исключения, являются подклассом OSError() и возникают в зависимости от системного кода ошибки.

BlockingIOError:

Исключение BlockingIOError поднимается, когда операция блокирует объект (например, сокет), установленный для неблокирующей операции. Соответствует errno EAGAIN, EALREADY, EWOULDBLOCK и EINPROGRESS.

В дополнение к таковым OSError, BlockingIOError может иметь еще один атрибут:

  • characters_written — целое число, содержащее количество символов, записанных в поток до его блокировки. Этот атрибут доступен при использовании буферизованных классов ввода/вывода из io модуля.

ChildProcessError:

Исключение ChildProcessError поднимается при сбое операции с дочерним процессом. Соответствует errno ECHILD.

ConnectionError:

Исключение ConnectionError это базовый класс для вопросов, связанных с подключением.

Подклассы ConnectionError:

  • BrokenPipeError:

    Исключения BrokenPipeError это подкласс ConnectionError, возникающий при попытке записи в канал, когда другой конец был закрыт, или при попытке записи в сокет, который был отключен для записи. Соответствует errno EPIPE и ESHUTDOWN.

  • ConnectionAbortedError:

    Исключения ConnectionAbortedError это подкласс ConnectionError, возникает, когда попытка соединения прерывается партнером. Соответствует errno ECONNABORTED.

  • ConnectionRefusedError:

    Исключения ConnectionRefusedError это подкласс ConnectionError, возникающий, когда одноранговый узел отклоняет попытку подключения. Соответствует errno ECONNREFUSED.

  • ConnectionResetError:

    Исключения ConnectionResetError это подкласс ConnectionError, возникающий при сбросе соединения узлом. Соответствует errno ECONNRESET.

FileExistsError:

Исключение FileExistsError поднимается при попытке создать файл или каталог, который уже существует. Соответствует errno EEXIST.

FileNotFoundError:

Исключение FileNotFoundError поднимается, когда файл или каталог не существует. Соответствует errno ENOENT.

InterruptedError:

Исключение InterruptedError поднимается, когда системный вызов прерывается входящим сигналом. Соответствует errno EINTR.

Python-3.5: Python теперь повторяет системные вызовы, когда системный вызов прерывается сигналом, кроме случаев, когда обработчик сигнала вызывает исключение вместо возбуждения InterruptedError.

IsADirectoryError:

Исключение IsADirectoryError поднимается, когда к каталогу применяется файловая операция, например os.remove(). Соответствует errno EISDIR.

NotADirectoryError:

Исключение NotADirectoryError возникает, когда совершается попытка операции с каталогом, например os.listdir(), а на самом деле путь не является каталогом. Соответствует errno ENOTDIR.

PermissionError:

Исключение PermissionError поднимается при попытке запустить операцию без соответствующих прав доступа — например, прав доступа к файловой системе. Соответствует errno EACCES и EPERM.

ProcessLookupError:

Исключение ProcessLookupError поднимается, когда данный процесс не существует. Соответствует errno ESRCH.

TimeoutError:

Исключение TimeoutError поднимается, когда время ожидания системной функции на системном уровне. Соответствует errno ETIMEDOUT.

Сначала позвольте мне дать некоторую справочную информацию, которая приводит к проблеме. На моем ноутбуке с Win 8.1 были установлены / установлены две версии python. Первоначально Py 2.5 был установлен по умолчанию. Я сделал это так: я переименовал python.exe в Python 3.5 как python35.exe, а файл pythonw.exe как pythonw35.exe, которые, похоже, создали два файла .dll с такими же именами, как у двух файлов (я не помню, присутствовали ли два файла dll до переименования) и успешно установил Python 2.7 по умолчанию (т.е. когда я набирал команду python в командной строке, запускался python 2.7). Недавно мне нужно было установить Python 3.5 по умолчанию. Затем я аналогичным образом переименовал файлы версии Python 2.7 и вернул имена файлов версии 3.5 к их исходным нормальным форматам (то есть python.exe и pythonw.exe).

После всего этого хаоса я запускаю print("Hello World") в IDLE, и возникает следующая ошибка:

IDLE internal error in runcode()
Traceback (most recent call last):
  File "C:Python35-32libidlelibrpc.py", line 339, in putmessage
    r, w, x = select.select([], [self.sock], [])
TypeError: argument must be an int, or have a fileno() method.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:Python35-32libidlelibrpc.py", line 240, in asyncqueue
    self.putmessage((seq, request))
  File "C:Python35-32libidlelibrpc.py", line 342, in putmessage
    raise OSError("socket no longer exists")
OSError: socket no longer exists

3 ответа

Я также столкнулся с той же проблемой. Эта ошибка возникла из-за того, что мой файл был назван «коллекциями». Это означает, что если вы называете свои файлы какой-либо встроенной функцией, ключевым словом, модулем и т. Д., Эта ошибка возникнет.

Решение этой ошибки: проверьте, создали ли вы какой-либо файл с помощью какой-либо встроенной функции, ключевого слова, модуля и т. Д. Если да, то переименуйте имя файла, которое не связано с каким-либо ключевым словом python. Это будет работать как положено.


2

clemens
7 Фев 2018 в 17:44

Итак, я только что снова установил установку python 3.5.1, и все в порядке.


1

snow
7 Июн 2016 в 23:36

Если вышеуказанные решения не работают, простая перезагрузка может решить проблему. Вы можете перезапустить оболочку Python или свое устройство. Если проблема не исчезнет, ​​я рекомендую переустановить python.


0

AYIBO ROBERTS
4 Авг 2020 в 00:52

Понравилась статья? Поделить с друзьями:
  • Ose exe ошибка приложения
  • Ottplayer ошибка подключения к источнику потока
  • Osd verrouillage как исправить
  • Ottplayer error get data of plst
  • Osconflib dll ошибка