Перейти к содержимому
  • 0
Wanderer13

Как "убрать" ошибку?

Вопрос

например: при работе команды rednet.open(x), если модем x не установлен, то выдаётся ошибка "No such modem x". И при этом, вся программа, в которой срабатывает эта команда, прекращает работу из-за этой ошибки.

Как убрать ошибку, если мне например надо, чтобы несмотря на неё программа продолжала работать?

P.S.: Слышал есть какой-то "EventRaw" может с ним что-то можно сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

например: при работе команды rednet.open(x), если модем x не установлен, то выдаётся ошибка "No such modem x". И при этом, вся программа, в которой срабатывает эта команда, прекращает работу из-за этой ошибки. Как убрать ошибку, если мне например надо, чтобы несмотря на неё программа продолжала работать?

 

а зачем вызывать в программе rednet.open(), если модем использовать не планируется? 

 

Ну а так-то посмотри аккуратно тут: http://computercraft.info/wiki/Peripheral_(API). Все расписано, как по фильтру найти что-то, как обнаружить, как подключить или проверить состояние, есть ли там вообще где-то моник или принтер или модем, и как эти периферийные устройства использовать в дальнейшем без ошибок и вылетов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а зачем вызывать в программе rednet.open(), если модем использовать не планируется? 

 

Ну а так-то посмотри аккуратно тут: http://computercraft.info/wiki/Peripheral_(API). Все расписано, как по фильтру найти что-то, как обнаружить, как подключить или проверить состояние, есть ли там вообще где-то моник или принтер или модем, и как эти периферийные устройства использовать в дальнейшем без ошибок и вылетов.

Мне нужно именно убрать ошибку. А про модем - это пример.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
например: при работе команды rednet.open(x), если модем x не установлен

 

 

Мне нужно именно убрать ошибку.

ну дак не вызывай rednet.open(x) и не буде никакой ошибки -_-

или pcall используй и обрабатывай результат, какие тут трудности, не могу понять?)

 

П.С. например, нет тормозной жидкости, а ты нажимаешь на тормоз - горит красная лампочка аварии. Не нажимай на тормоз - и авария гореть не будет. Или лампочку выкрути.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Безопасный вызов функции:

упех, причина = pcall(функция,параметры)

Ели функция сработала без ошибок, успех будет равен true, иначе в причине будет ошибка.

Изменено пользователем Quant

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Безопасный вызов функции: упех, причина = pcall(функция,параметры)

немного уточню.

pcall  в случае  ошибки внутри f вернет false и сообщение об ошибке. При этом программа продолжит работать. Если же вызов завершился успешно, то вернется статус true и все параметры, которая возвращает функция f(), если она их возвращает вообще, конечно. В любом случае статус всегда будет получен. Если функция возвращает не один параметр, то нужно естественно их тоже принимать все после статуса смело, начиная со второго, перед этим естественно убедится и проверить, что статус = true, 

то есть status, result_1, result_2, ... = pcall(f,arg1,arg2,..)

function f(a, b)
 c = a/b
 return c
end

status, result = pcall(f,6,3)
print(status, result)

status, result = pcall(f,6,'string')
print(status, result)

--------------------------
true	2.0
false	input:2: attempt to perform arithmetic on a string value (local 'b')


Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я нашёл то что мне нужно: https://youtu.be/S5kegQyF504 вроде бы автор видео создатель этого сайта.

Я читал ответы с тем же самым pcall но до меня никак не доходило.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@@Wanderer13, небольшое уточнение.

Хотя pcall и является мощным средством для продолжения выполнения программы, невзирая на ошибки, не стоит забывать и об уже прозвучавшей аналогии:

 

П.С. например, нет тормозной жидкости, а ты нажимаешь на тормоз - горит красная лампочка аварии. Не нажимай на тормоз - и авария гореть не будет. Или лампочку выкрути.

Игнорирование одних ошибок может спровоцировать ошибки впоследствии, т.к. рано или поздно тормоз все-таки потребуется.

 

Лучшим средством для борьбы с ошибками является поиск и устранение вызвавших их причин. В случаях, когда причину ошибки невозможно контролировать изнутри программы, имеет смысл использовать pcall. Очень редко возникают и другие случаи, когда использование pcall объективно лучше других методов обойти ошибку, но в целом от использования pcall лучше отказаться.

 

Поэтому не стоит ставить вопрос таким образом:

Мне нужно именно убрать ошибку. А про модем - это пример.

Гораздо полезнее потратить силы на то, чтобы понять причину ошибки в каждом конкретном случае. При отсутствующем модеме – не задействовать его возможности, если они являются не обязательными. При отсутствующем файла на диске – создать его. При не полученном от сервера сообщении – дождаться его или повторить запрос. Нет универсального средства обхода ошибок, даже если pcall кажется таковым.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

При отсутствующем модеме – не задействовать его возможности, если они являются не обязательными.

вообще, могу предположить, что так реализовывается какая-нибудь прога с автообновлением(или куда там в кк модем выходит?). есть модем - проверяет обновления. нет модема - ну и фиг с ним, работаем дальше

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Задача: сбивать самолёты противника над базой.

Я написал разработал крутой алгоритм, он детектит самолёт и сбивает его. Всё работает отлично.

 

Только союзники жалуются, что не пролететь теперь, и авиации несёт потери. Командир орёт.

Как сделать чтобы командир не орал? Есть какая-нибудь команда?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...