<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Обработать исключение для включаемого файла через dofile]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Обработать исключение для включаемого файла через dofile форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Thu, 23 Apr 2026 11:07:50 +0300</pubDate>
		<item>
			<title>Обработать исключение для включаемого файла через dofile</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message44701/topic5406/">Обработать исключение для включаемого файла через dofile</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Второй метод спасет только от формальных синтаксических ошибок в коде.<br />Если синтаксически код корректен, но возникнет ошибка при исполнении (обращение к необъявленной переменной, например) - то второй метод не спасет.<br />А первый - спасёт, для того и предназначен <br />
			<i>12.05.2020 07:46:55, swerg.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message44701/topic5406/</link>
			<guid>http://forum.quik.ru/messages/forum10/message44701/topic5406/</guid>
			<pubDate>Tue, 12 May 2020 07:46:55 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Обработать исключение для включаемого файла через dofile</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message44697/topic5406/">Обработать исключение для включаемого файла через dofile</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Нашел в сети два варианта как это сделать:<br />
====code====
<pre>Функция&nbsp;&nbsp;pcall вызывает функцию f с аргументами, переданными в параметрах и возвращает результат успешности вызова функции. Если функция f была вызвана успешно, то остальные возвращаемые значения pcall являются результатом вызова функции f, иначе второе возвращаемое значение является сообщением об ошибке. Например:

local callResult, result = pcall(dofile, fileName)
if callResult then
&nbsp;&nbsp;&nbsp;&nbsp;-- все в порядке, result это то, что вернула функция dofile
else
&nbsp;&nbsp;&nbsp;&nbsp;-- result это сообщение об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;print(result)
end

Второй способ загрузки файла использует переключение окружения и уже знакомую функцию loadfile:

-- загружаем чанк из файла
local result
local func, errorMsg = loadfile('data2.lua')
if func then
&nbsp;&nbsp;-- создаем таблицу для окружения,
&nbsp;&nbsp;-- в котором будет выполняться функция func
&nbsp;&nbsp;local P = {}
&nbsp;&nbsp;-- устанавливаем окружение для функции func
&nbsp;&nbsp;setfenv(func, P)
&nbsp;&nbsp;-- вызываем функцию func
&nbsp;&nbsp;func()
&nbsp;&nbsp;-- все "глобальные" переменные,
&nbsp;&nbsp;-- объявленные внутри чанка, попадут в таблицу P
&nbsp;&nbsp;result = P.a
else
&nbsp;&nbsp;print(errorMsg)
end</pre>
=============
Но хотелось бы понимать чем они отличаются друг от друга. <img src="http://forum.quik.ru/upload/main/smiles/5/icon_biggrin.png" border="0" data-code=":lol:" data-definition="SD" alt=":lol:" style="width:16px;height:16px;" title="Широкая улыбка" class="bx-smile" /> &nbsp; <br />
			<i>12.05.2020 00:44:47, Иван.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message44697/topic5406/</link>
			<guid>http://forum.quik.ru/messages/forum10/message44697/topic5406/</guid>
			<pubDate>Tue, 12 May 2020 00:44:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Обработать исключение для включаемого файла через dofile</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message44696/topic5406/">Обработать исключение для включаемого файла через dofile</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Есть файл №2 со скриптом Lua подключаемый в основной скрипт Lua №1 через dofile().<br />Можно как-то создать исключение если в этом файле №2 есть ошибка - проигнорировать его и не прерывать работу скрипта №1.<br />Проводимые вычисления и операции в скрипте №2 никак не затрагивают работу скрипта №1. <br />
			<i>12.05.2020 00:34:04, Иван.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message44696/topic5406/</link>
			<guid>http://forum.quik.ru/messages/forum10/message44696/topic5406/</guid>
			<pubDate>Tue, 12 May 2020 00:34:04 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
