Проверка на nil

Страницы: 1
RSS
Проверка на nil
 
Здравствуйте!
Подскажите выскочила ошибка: "attempt to index a nil value"
на строчку: "if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then"

Вроде как раз на nil проверяю.  
 
Цитата
Евгений написал:
Подскажите выскочила ошибка: "attempt to index a nil value" на строчку: "if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then"Вроде как раз на nil проверяю.  
 У вас getFuturesLimit(FIRM, ACCOUNT, 0, "SUR") равно nil, а его индексировать нельзя.
 
Цитата
TGB написал:
Цитата
Евгений написал:
Подскажите выскочила ошибка: "attempt to index a nil value" на строчку: "if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then"Вроде как раз на nil проверяю.  
  У вас getFuturesLimit(FIRM, ACCOUNT, 0, "SUR") равно nil, а его индексировать нельзя.
if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR")==nil then
   break
end

if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then
   break
end

Ругается на строчку if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then
 
Цитата
Евгений написал:
Ругается на строчку if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then
  Если функция, в которой это происходит небольшая, то выложите ее текст. Трудно определять птицу по заднему оперению :smile:
 
Цитата
TGB написал:
Цитата
Евгений написал:
Ругается на строчку if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then
   Если функция, в которой это происходит небольшая, то выложите ее текст. Трудно определять птицу по заднему оперению ::
Нет никакой функции. Это происходит в main:

function main()
  while IsRun do
     sleep(1000)
     for q = 1, 1 do
        if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR")==nil then
            break
        end

        if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then
           break
        end
     end
  end
end
 
Не вызывайте функцию два раза, сохраните результат в локальную переменную.
Странно конечно, похоже почему-то при первом вызове результат нормальный, а при втором - nil
 
Покажите чему равно
Код
type(getFuturesLimit(FIRM, ACCOUNT, 0, "SUR"))
 
Цитата
BlaZed написал:
Покажите чему равно
Код
  type( getFuturesLimit (FIRM, ACCOUNT,  0 ,  "SUR" ))  
table.

Еще ньанс: Данная ошибка выскочила всего 1 раз за год бесперебойной работы скрипта. Хотелось бы узнать причину или как побороть данную ошибку, чтобы срипт не вылетал с ошибкой.  
 
Цитата
Евгений написал:
Еще ньанс: Данная ошибка выскочила всего 1 раз за год бесперебойной работы скрипта.
  Следующий раз, пожалуйста, начинайте с нюансов и указывайте версию QUIK, а также версию QLua. А то вы мозги форуму чуть не свихнули :smile: .
 
Цитата
Евгений написал:

Еще ньанс: Данная ошибка выскочила всего 1 раз за год бесперебойной работы скрипта..  
Сразу бы это сказали...
Цитата
Евгений написал:
Хотелось бы узнать причину или как побороть данную ошибку, чтобы срипт не вылетал с ошибкой.
Вероятно при первой проверке getFuturesLimit вернул таблицу, а при второй у брокера что-нибудь глюкнуло, и getFuturesLimit вернул nil
Надо было закинуть результат getFuturesLimit в переменную и ее уже проверять
 
Цитата
TGB написал:
Цитата
Евгений написал:
Еще ньанс: Данная ошибка выскочила всего 1 раз за год бесперебойной работы скрипта.
   Следующий раз, пожалуйста, начинайте с нюансов и указывайте версию QUIK, а также версию QLua. А то вы мозги форуму чуть не свихнули :: .
Сорри, не подумал.
Версия Quik 8.8.4.3
Lua 5.3
 
Цитата
BlaZed написал:
Цитата
Евгений написал:

Еще ньанс: Данная ошибка выскочила всего 1 раз за год бесперебойной работы скрипта..  
Сразу бы это сказали...
Цитата
Евгений написал:
Хотелось бы узнать причину или как побороть данную ошибку, чтобы срипт не вылетал с ошибкой.
Вероятно при первой проверке getFuturesLimit вернул таблицу, а при второй у брокера что-нибудь глюкнуло, и getFuturesLimit вернул nil
Надо было закинуть результат getFuturesLimit в переменную и ее уже проверять
Спасибо, так и сделаю
 
А может быть такое, что Квик что-то меняет в своей таблице, а скрипт в это время читает это поле?
Помню, в районе quik2dde.ru упоминаемый мною kalikazandr писал, что такое возможно, якобы, даже неполный кусок изменяемой Квиком строки можно прочитать. Или это байки алготрейдеров?
 
Цитата
Евгений написал:
Еще ньанс: Данная ошибка выскочила всего 1 раз за год бесперебойной работы скрипта. Хотелось бы узнать причину или как побороть данную ошибку, чтобы срипт не вылетал с ошибкой.
Мысль посетила, совсем не уверен: вроде бы эта функция задействует библиотеку расчёта лимитов брокера, которая по идее обновляется даже если вы квик не обновляете, т.к. правила расчёта на бирже меняются. А она может в теории или сглючить, вдруг даже полезть в сеть за данными и не получить их (например двойной запрос воспринят как ддос). По какой-то же причине юзеры жалуются на тормоза при выставлении заявок на срочном рынке...
 
Код
local t=getFuturesLimit(FIRM, ACCOUNT, 0, "SUR");
local x=t.cbplplanned or 0; 
 
Код
local x=0;
local t=getFuturesLimit(FIRM, ACCOUNT, 0, "SUR");
if t then x=t.cbplplanned end 
 
Цитата
nikolz написал:
Код
   local  x =  0 ;
 local  t =  getFuturesLimit (FIRM, ACCOUNT,  0 ,  "SUR" );
 if  t  then  x = t.cbplplanned  end    
Спасибо, уже сделал :-)
Страницы: 1
Читают тему
Наверх