Сбой кода Python при попытке, кроме блока

1

Я использую облачную платформу для запуска программы, и мой код выходит из строя при запуске ошибки, которая находится внутри блока try/except. Я не знаю, связано ли это с платформой, но мне нужен способ избежать сбоя программы.

try:

    r = self.http.request('GET', 'https://www.alphavantage.co/query?function=TIME_SERIES_INTADAY&symbol=VIX&interval=1min&apikey=apikey')
    data = json.loads(r.data)

    if 'Time Series (1min)' in data.keys():
        self.VIX = Decimal(data['Time Series (1min)'][list(data['Time Series (1min)'].keys())[0]]['4. close'])
    else:  
        raise Exception("key")


except Exception as e:

    self.Debug('VIX Error: ' + str(e))

    try:
        r = self.http.request('GET', 'https://www.google.com/finance/getprices?q=VIX&i=60&p=1d&f=c')   #f=d,o,h,l,c,v'
        s = (r.data).decode('utf-8')
        l = list(s.splitlines())
        self.VIX = Decimal(l[-1])

    except Exception as e:

        self.Debug('VIX Error: ' + str(e))  #change after last deployment

        if (type(self.VIX) is Decimal) == False:
            self.VIX = 0

LiveTradingRealTimeHandler.Run(): произошла ошибка в запланированном событии QuantConnect.Scheduling.ScheduledEvent. Ошибка была UnicodeDecodeError: кодек "utf-8" не может декодировать байт 0xa0 в позиции 57360: недопустимый стартовый байт

Ошибка выполнения: UnicodeDecodeError: кодек "utf-8" не может декодировать байт 0xa0 в позиции 57405: недействительный стартовый байт в OnData в main.py:line 417 в GetVix в main.py:line 458 UnicodeDecodeError: кодек "utf-8" не может декодировать байт 0xa0 в позиции 57405: недействительный стартовый байт Stack Trace: System.Exception: UnicodeDecodeError: кодек "utf-8" не может декодировать байт 0xa0 в позиции 57405: недействительный стартовый байт в OnData в main.py:line 417 в GetVix в main.py:line 458 ---> Python.Runtime.PythonException: UnicodeDecodeError: кодек 'utf-8' не может декодировать байт 0xa0 в позиции 57405: недопустимый стартовый байт в Python.Runtime.PyObject.Invoke(Python.Runtime.PyTuple args, Python.Runtime.PyDict kw) [0x00033] в <7ada479175184ff388929ece541bbdb4>: 0 на Python.Runtime.PyObject.InvokeMethod (имя System.String, Python.Runtime.PyTuple args, Python.Runtime.PyDict kw) [0x00007] в <7ada479175184ff388929ece541bbdb4>: 0 на Python.Runtime.PyObject.TryInvokeMember(System.Dynamic.InvokeMemberBinder binder, System.Object [] args, System.Object & result) [0x0003e] в <7ada479175184ff388929ece541bbdb4>: 0 at (динамический метод-оболочка) System.Object: CallSite.Target(System.Runtime.CompilerServices.Closure, System.Runtime.CompilerServices.CallSite, object, QuantConnect.Data.Slice) в QuantConnect.AlgorithmFactory.Python.Wrappers.AlgorithmPythonWrapper.OnData(QuantConnect.Data.Slice slice) [0x00088] в: 0 в QuantConnect.Lean.Engine.AlgorithmManager.Run(QuantConnect.Packets.AlgorithmNodePacket задание, QuantConnect.Interfaces.Algorithm algorithm, QuantConnect.Lean.Engine.DataFeeds.IDataFeed feed, QuantConnect.Lean.Engine.TransactionHandlers.ITransactionHandler транзакции, QuantConnect.Lean.Engine.Results.IResultHandler results, QuantConnect.Lean.Engine.RealTime.IRealTimeHandler realtime, QuantConnect. Lean.Engine.Server.ILeanManager leanManager, QuantConnect.Lean.Engine.Alpha.IAlphaHandler alphas, System.Threading.CancellationToken token) [0x013e5] в: 0 --- Конец внутренней трассировки стека исключений ---

  • 1
    Побочный вопрос, почему вы говорите, что if (type(self.VIX) is Decimal) == False: вместо if not isinstance(self.VIX, Decimal):
  • 1
    Пожалуйста, отправьте полный текст трассировки ошибок, скорее всего, будет показана строка, из которой произошла ошибка
Показать ещё 1 комментарий
Теги:

1 ответ

0
Лучший ответ

Если вы поймаете исключение в Python или какой-либо другой язык, вам необходимо четко указать, какие исключения могут быть уловлены или ваша программа по-прежнему будет терпеть крах. Вы UnicodeDecodeError Exception но ваша программа UnicodeDecodeError из UnicodeDecodeError поэтому вы должны попытаться поймать эту ошибку и обработать ее соответствующим образом.

Попробуйте что-то подобное, except UnicodeDecodeError as e:

  • 7
    except (Exception, UnicodeDecodeError) as e: кажется бессмысленным? Exception - это основа всего, было бы лучше - поймать несколько более конкретных исключений, нет?
  • 2
    но Exception является базовым классом других исключений (который основан на BaseException), поэтому он должен перехватывать любые хорошо реализованные исключения
Показать ещё 11 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню