Можно ли создать никогда не сбой python код с обработкой исключений? - PullRequest
1 голос
/ 31 марта 2020

Интересно, аварийно завершается ли приведенный ниже код python (в частности, http-сервер)? Предполагая, что в каком-либо коде библиотеки (уже скомпилированном) нет ошибки грамматики, я думаю, что обработка исключений за какое-то время l oop должна быть достаточной для того, чтобы этот код не обрабатывал sh в любое время. Я некоторое время пробовал приведенный ниже код и никогда не падал, но мне интересно, теоретически или практически возможно ли для этой программы взломать sh?

while True:
    try:

        server = HTTPServer(('', PORT_NUMBER), myHandler)
        server.serve_forever()

    except:
        try:
           server.socket.close()
        except:
            pass

Фактическая причина, по которой я задаю этот вопрос, который я не задаю? не хочу иметь дело с UNIX персоналом, который следит за процессом и перезапускает его в случае сбоя. Достаточно ли вышеуказанного решения? Спасибо.

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Как и Клаус Д., уже упомянутый в его комментарии, могут быть случаи, когда код закрытия сокета у вас, кроме блока, вылетает. При желании вы также можете бросить попытку, кроме как вокруг этого ...

Другой вариант - использовать что-то вроде этого (без UNIX участия):

http://supervisord.org/

Это легко запустить и автоматически перезапустит вашу программу, если она выйдет из строя.

0 голосов
/ 31 марта 2020

Если блок «кроме» имеет код работы, он может вызвать sh причину. Я имею в виду, что-то вроде этого:

# path/to/py3
FOO = [1,2,3]
try:
  # index out of bound, try block has error, so it goes ahead and executes except-block
  print(FOO[4])
except:
  # if there is some kind of error, like Syntax error, program can crash
  print "Index out of bound!"
  print("2"+2)
  print(FOO["BAR"])

, но если в блоке исключений тоже есть правильные логики c, то программа должна работать без сбоев

...