Вот эта функция переводит строку в число, а при невозможности возвращает nil:
tonumber(str)
Поэтому ваш код можно изменить примерно так:
a = io.read(); --строка
local num = tonumber(a) -- число или nil
if num ~= nil and num > 0 then
print(num);
end
Ещё вариант:
a = io.read(); --строка
local num = tonumber(a) -- число или nil
if num == nil then --строку невозможно перевести в число
print("error") --выводим текст ошибки
elseif num > 0 then --строка перевелась в число, и оно больше нуля
print(num); --выводим это число
end