Я использую облачную платформу для запуска программы, и мой код выходит из строя при запуске ошибки, которая находится внутри блока 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 --- Конец внутренней трассировки стека исключений ---
Если вы поймаете исключение в Python или какой-либо другой язык, вам необходимо четко указать, какие исключения могут быть уловлены или ваша программа по-прежнему будет терпеть крах. Вы UnicodeDecodeError
Exception
но ваша программа UnicodeDecodeError
из UnicodeDecodeError
поэтому вы должны попытаться поймать эту ошибку и обработать ее соответствующим образом.
Попробуйте что-то подобное, except UnicodeDecodeError as e:
except (Exception, UnicodeDecodeError) as e:
кажется бессмысленным? Exception
- это основа всего, было бы лучше - поймать несколько более конкретных исключений, нет?
if (type(self.VIX) is Decimal) == False:
вместоif not isinstance(self.VIX, Decimal):