Ошибка 1s Ошибка выполнения функции ошибки Windows

Обновлено: 21.11.2024

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

Справочник по JavaScript содержит исчерпывающую информацию об операторах этой главы. Символ точки с запятой ( ; ) используется для разделения инструкций в коде JavaScript.

Любое выражение JavaScript также является оператором. Полную информацию о выражениях см. в разделе Выражения и операторы.

Блокировать оператор

Самым простым оператором является блочный оператор, который используется для группировки операторов. Блок ограничен парой фигурных скобок:

Пример

Операции Block обычно используются с операторами управления потоком ( if , for , while ).

Здесь < x++; >является оператором блока.

Примечание. JavaScript до ECMAScript2015 (6-я редакция) не имеет блочной области! В старом JavaScript переменные, введенные в блок, привязаны к содержащей их функции или скрипту, и эффекты их установки сохраняются за пределами самого блока. Другими словами, операторы блока не определяют область действия.

"Автономные" блоки в JavaScript могут давать совершенно другие результаты, чем в C или Java. Например:

Это выводит 2, потому что оператор var x внутри блока находится в той же области видимости, что и оператор var x перед блоком. (В C или Java эквивалентный код будет иметь результат 1 .)

Начиная с ECMAScript2015, объявления переменных let и const имеют блочную область видимости. Дополнительную информацию см. на справочных страницах let и const.

Условные операторы

Условный оператор — это набор команд, которые выполняются, если заданное условие истинно. JavaScript поддерживает два условных оператора: if. еще и переключиться .

если. еще заявление

Используйте оператор if для выполнения оператора, если логическое условие истинно. Используйте необязательное предложение else для выполнения инструкции, если условие ложно.

Инструкция if выглядит следующим образом:

Здесь условием может быть любое выражение, имеющее значение true или false . (См. Boolean для объяснения того, что оценивается как true и false .)

Если условие оценивается как истинное, выполняется оператор_1. В противном случае выполняется оператор_2. оператор_1 и оператор_2 могут быть любым оператором, включая дополнительные вложенные операторы if.

Вы также можете составить операторы, используя else if для последовательной проверки нескольких условий, как показано ниже:

В случае нескольких условий будет выполнено только первое логическое условие, которое оценивается как истинное. Чтобы выполнить несколько операторов, сгруппируйте их в блочном операторе ( < … >).

Рекомендации

В целом рекомендуется всегда использовать блочные операторы, особенно при вложенных операторах if:

Как правило, рекомендуется не использовать условие "если". else с присваиванием типа " x = y " в качестве условия:

Однако в тех редких случаях, когда вы захотите сделать что-то подобное, в документации while есть раздел Использование присваивания в качестве условия с рекомендациями по общему передовому синтаксису, о котором вам следует знать и которому следует следовать.

Ложные значения

Следующие значения оцениваются как ложные (также называемые ложными значениями):

  • ложь
  • не определено
  • нуль
  • 0
  • Нет
  • пустая строка ("")

Все остальные значения, включая все объекты, оцениваются как истина при передаче в условный оператор.

Примечание. Не путайте примитивные логические значения true и false со значениями true и false логического объекта!

Пример

В следующем примере функция checkData возвращает значение true, если количество символов в объекте Text равно трем. В противном случае отображается предупреждение и возвращается false .

оператор переключения

Инструкция switch позволяет программе вычислить выражение и попытаться сопоставить значение выражения с меткой case. Если совпадение найдено, программа выполняет соответствующий оператор.

Инструкция switch выглядит следующим образом:

JavaScript оценивает приведенный выше оператор switch следующим образом:

  • Программа сначала ищет предложение case с меткой, соответствующей значению выражения, а затем передает управление этому предложению, выполняя связанные операторы.
  • Если соответствующая метка не найдена, программа ищет необязательное предложение по умолчанию:
    • Если найдено предложение по умолчанию, программа передает управление этому предложению, выполняя связанные операторы.
    • Если предложение по умолчанию не найдено, программа возобновляет выполнение с оператора, следующего за концом switch .
    • (По соглашению, предложение по умолчанию пишется как последнее предложение, но это не обязательно.)

    операторы разрыва

    Необязательный оператор break, связанный с каждым предложением case, гарантирует, что программа выйдет из режима switch после выполнения соответствующего оператора, а затем продолжит выполнение с оператора, следующего за оператором switch . Если break опущен, программа продолжит выполнение внутри оператора switch (и будет оценивать следующий case и т. д.).

    Пример

    В следующем примере, если FruitType оценивается как "Банан", программа сопоставляет значение с регистром "Банан" и выполняет соответствующий оператор. При обнаружении разрыва программа выходит из переключателя и продолжает выполнение с оператора, следующего за переключателем. Если бы break был опущен, оператор для case 'Cherry' также был бы выполнен.

    Операции обработки исключений

    Вы можете генерировать исключения с помощью оператора throw и обрабатывать их с помощью оператора try. операторы catch.

    Типы исключений

    В JavaScript можно создать практически любой объект. Тем не менее, не все брошенные предметы одинаковы. Хотя в качестве ошибок принято выдавать числа или строки, часто более эффективно использовать один из типов исключений, специально созданных для этой цели:

    оператор броска

    Используйте оператор throw для создания исключения. Оператор throw указывает значение, которое должно быть выброшено:

    Вы можете выдать любое выражение, а не только выражения определенного типа. Следующий код создает несколько исключений разных типов:

    попробуй. оператор catch

    Попытка. Оператор catch помечает блок операторов для попытки и указывает один или несколько ответов в случае возникновения исключения. Если выдается исключение, попытка. Оператор catch ловит его.

    Попытка. Оператор catch состоит из блока try, который содержит один или несколько операторов, и блока catch, содержащего операторы, указывающие, что делать, если в блоке try возникает исключение.

    Другими словами, вы хотите, чтобы блок try завершился успешно, но если это не так, вы хотите передать управление блоку catch. Если какой-либо оператор в блоке try (или в функции, вызываемой из блока try) выдает исключение, управление немедленно переходит к блоку catch. Если в блоке try не выдается исключение, блок catch пропускается. Блок finally выполняется после выполнения блоков try и catch, но перед операторами, следующими за try. оператор catch.

    В следующем примере используется попытка. поймать заявление. В примере вызывается функция, которая извлекает название месяца из массива на основе значения, переданного в функцию. Если значение не соответствует номеру месяца ( 1–12 ), создается исключение со значением «InvalidMonthNo», а операторы в блоке catch устанавливают для переменной monthName значение «неизвестно».

    Блок catch

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

    Блок catch указывает идентификатор (catchID в приведенном выше синтаксисе), который содержит значение, указанное оператором throw. Вы можете использовать этот идентификатор для получения информации о выброшенном исключении.

    JavaScript создает этот идентификатор при вводе блока catch. Идентификатор сохраняется только на время действия блока catch. После завершения выполнения блока catch идентификатор больше не существует.

    Например, следующий код создает исключение. При возникновении исключения управление передается блоку catch.

    Примечание. При регистрации ошибок на консоли внутри блока catch для отладки рекомендуется использовать console.error(), а не console.log(). Он форматирует сообщение как ошибку и добавляет его в список сообщений об ошибках, генерируемых страницей.

    Блок finally

    Блок finally содержит операторы, которые должны выполняться после выполнения блоков try и catch. Кроме того, блок finally выполняется перед кодом, следующим за оператором try…catch…finally.

    Также важно отметить, что блок finally будет выполняться независимо от того, возникнет ли исключение. Однако если возникает исключение, операторы в блоке finally выполняются, даже если ни один блок catch не обрабатывает выброшенное исключение.

    Вы можете использовать блок finally, чтобы сценарий корректно завершал работу при возникновении исключения. Например, вам может потребоваться освободить ресурс, который был привязан вашим сценарием.

    В следующем примере открывается файл, а затем выполняются операторы, использующие этот файл. (Серверный JavaScript позволяет вам получать доступ к файлам.) Если возникает исключение, когда файл открыт, блок finally закрывает файл до сбоя сценария. Использование finally здесь гарантирует, что файл никогда не останется открытым, даже если произойдет ошибка.

    Если блок finally возвращает значение, это значение становится возвращаемым значением всей продукции try…catch…finally, независимо от любых операторов return в блоках try и catch:

    Перезапись возвращаемых значений блоком finally также применяется к исключениям, генерируемым или повторно генерируемым внутри блока catch:

    Попытка вложения. операторы catch

    Вы можете вложить одну или несколько попыток. операторы catch.

    Если у внутреннего блока try нет соответствующего блока catch:

    1. он должен содержать блок finally и
    2. прилагаемая попытка. блок catch оператора catch проверяется на совпадение.

    Дополнительную информацию см. в разделе о вложенных блоках try в файле try. поймать справочную страницу.

    Использование объектов ошибок

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

    Свойство name предоставляет общий класс Error (например, DOMException или Error ), а message обычно предоставляет более краткое сообщение, чем можно было бы получить, преобразовав объект ошибки в строку.

    Если вы создаете свои собственные исключения, чтобы воспользоваться преимуществами этих свойств (например, если ваш блок catch не различает ваши собственные исключения и системные), вы можете использовать конструктор ошибок.

    Без обработки ошибок или обработки исключений любая ошибка во время выполнения является фатальной: отображается сообщение об ошибке, и выполнение останавливается.

    Ключевое слово Error также используется в заявлении об ошибке, которое поддерживается для обратной совместимости.

    Синтаксис

    Части

    Термин Определение
    Перейти к строке Включает процедуру обработки ошибок, которая начинается со строки, указанной в обязательном аргументе line. Аргумент line – это любая метка строки или номер строки. Если возникает ошибка во время выполнения, управление переходит к указанной строке, активируя обработчик ошибок. Указанная строка должна находиться в той же процедуре, что и оператор On Error, иначе произойдет ошибка времени компиляции.
    GoTo 0 Отключает включенный обработчик ошибок в текущей процедуре и сбрасывает его на Nothing .
    GoTo -1 Отключает включенное исключение в текущей процедуре и сбрасывает его на Nothing .
    Resume Next Указывает, что при возникновении ошибки времени выполнения управление переходит к оператору, непосредственно следующему за оператором, в котором произошла ошибка, и выполнение продолжается с этой точки. . Используйте эту форму вместо On Error GoTo при доступе к объектам.

    Примечания

    Мы рекомендуем по возможности использовать в коде структурированную обработку исключений, а не использовать неструктурированную обработку исключений и оператор On Error. Дополнительные сведения см. в разделе Попробуйте. Ловить. Окончательное заявление.

    Включенный обработчик ошибок – это обработчик, который включается оператором On Error. «Активный» обработчик ошибок — это включенный обработчик, который находится в процессе обработки ошибки.

    Если ошибка возникает, когда активен обработчик ошибок (между возникновением ошибки и оператором Resume, Exit Sub, Exit Function или Exit Property), обработчик ошибок текущей процедуры не может обработать ошибку. Управление возвращается вызывающей процедуре.

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

    Каждый раз, когда обработчик ошибок передает управление вызывающей процедуре, эта процедура становится текущей процедурой. Как только ошибка обрабатывается обработчиком ошибок в любой процедуре, выполнение возобновляется в текущей процедуре в точке, указанной оператором Resume.

    Подпрограмма обработки ошибок не является подпроцедурой или процедурой-функцией. Это раздел кода, отмеченный меткой строки или номером строки.

    Числовое свойство

    Подпрограммы обработки ошибок используют значение свойства Number объекта Err для определения причины ошибки. Подпрограмма должна проверить или сохранить соответствующие значения свойств в объекте Err до того, как может произойти любая другая ошибка или до того, как будет вызвана процедура, которая может вызвать ошибку. Значения свойств в объекте Err отражают только самую последнюю ошибку. Сообщение об ошибке, связанное с Err.Number, содержится в Err.Description .

    Вывод заявления

    Ошибка, вызванная методом Err.Raise, устанавливает для свойства Exception только что созданный экземпляр класса Exception. Чтобы поддерживать создание исключений производных типов исключений, в языке поддерживается оператор Throw. Это принимает единственный параметр, который является экземпляром исключения, которое должно быть выброшено. В следующем примере показано, как эти функции можно использовать с существующей поддержкой обработки исключений:

    Обратите внимание, что оператор On Error GoTo перехватывает все ошибки, независимо от класса исключения.

    При ошибке возобновить дальше

    On Error Resume Next заставляет выполнение продолжаться с оператора, следующего сразу за оператором, вызвавшим ошибку во время выполнения, или с оператора, следующего непосредственно за самым последним вызовом процедуры, содержащей оператор On Error Resume Next. Этот оператор позволяет продолжить выполнение, несмотря на ошибку времени выполнения. Вы можете поместить подпрограмму обработки ошибок там, где может произойти ошибка, а не передавать управление в другое место внутри процедуры. Оператор On Error Resume Next становится неактивным при вызове другой процедуры, поэтому вам следует выполнять оператор On Error Resume Next в каждой вызванной процедуре, если вы хотите, чтобы встроенная обработка ошибок была внутри этой процедуры.

    Конструкция On Error Resume Next может быть предпочтительнее On Error GoTo при обработке ошибок, возникающих при доступе к другим объектам. Проверка Err после каждого взаимодействия с объектом устраняет двусмысленность в отношении того, к какому объекту обращался код. Вы можете быть уверены, какой объект поместил код ошибки в Err.Number , а также какой объект изначально сгенерировал ошибку (объект, указанный в Err.Source ).

    При ошибке Перейти к 0

    При ошибке GoTo 0 отключает обработку ошибок в текущей процедуре. Он не указывает строку 0 в качестве начала кода обработки ошибок, даже если процедура содержит строку с номером 0. Без оператора On Error GoTo 0 обработчик ошибок автоматически отключается при выходе из процедуры.

    При ошибке Перейти к -1

    При ошибке GoTo -1 отключает исключение в текущей процедуре. Он не определяет строку -1 как начало кода обработки ошибок, даже если процедура содержит строку с номером -1. Без оператора On Error GoTo -1 исключение автоматически отключается при выходе из процедуры.

    Чтобы предотвратить запуск кода обработки ошибок, если ошибки не произошло, поместите оператор Exit Sub , Exit Function или Exit Property непосредственно перед процедурой обработки ошибок, как показано в следующем фрагменте:

    Здесь код обработки ошибок следует за оператором Exit Sub и предшествует оператору End Sub, чтобы отделить его от потока процедуры. Вы можете разместить код обработки ошибок в любом месте процедуры.

    Неотловленные ошибки

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

    Если вы создаете объект, который обращается к другим объектам, вы должны попытаться обработать любые необработанные ошибки, которые они передают обратно. Если вы не можете, сопоставьте коды ошибок в Err.Number с одной из ваших собственных ошибок, а затем передайте их обратно вызывающей стороне вашего объекта. Вы должны указать свою ошибку, добавив код ошибки в константу VbObjectError. Например, если у вас код ошибки 1052, назначьте его следующим образом:

    Системные ошибки во время вызовов библиотек динамической компоновки (DLL) Windows не вызывают исключений и не могут быть перехвачены с помощью перехвата ошибок Visual Basic. При вызове функций DLL следует проверять каждое возвращаемое значение на успешность или неудачу (в соответствии со спецификациями API), а в случае неудачи проверять значение свойства LastDLLError объекта Err.

    До сих пор сообщения об ошибках были только упомянуты, но если вы пробовали примеры, вы, вероятно, видели некоторые из них. Существует (как минимум) два различных типа ошибок: синтаксические ошибки и исключения.

    8.1. Синтаксические ошибки¶

    Синтаксические ошибки, также известные как ошибки синтаксического анализа, являются, пожалуй, самым распространенным типом жалоб, которые вы получаете, пока изучаете Python:

    Синтаксический анализатор повторяет ошибочную строку и отображает небольшую «стрелку», указывающую на самую раннюю точку в строке, где была обнаружена ошибка. Ошибка вызвана (или, по крайней мере, обнаружена) токеном, предшествующим стрелке: в примере ошибка обнаружена в функции print() , поскольку отсутствует двоеточие ( ':' ) перед этим. Имя файла и номер строки печатаются, чтобы вы знали, где искать, если ввод поступил из скрипта.

    8.2. Исключения¶

    Последняя строка сообщения об ошибке указывает, что произошло. Исключения бывают разных типов, и тип печатается как часть сообщения: типы в примере — ZeroDivisionError, NameError и TypeError. Строка, напечатанная как тип исключения, является именем возникшего встроенного исключения. Это верно для всех встроенных исключений, но не обязательно для пользовательских исключений (хотя это полезное соглашение). Стандартные имена исключений являются встроенными идентификаторами (а не зарезервированными ключевыми словами).

    Остальная часть строки содержит подробные сведения о типе исключения и его причине.

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

    В разделе "Встроенные исключения" перечислены встроенные исключения и их значения.

    8.3. Обработка исключений¶

    Можно написать программы, обрабатывающие выбранные исключения. Посмотрите на следующий пример, который запрашивает у пользователя ввод до тех пор, пока не будет введено допустимое целое число, но позволяет пользователю прервать программу (используя Control - C или что-то еще, что поддерживает операционная система); обратите внимание, что пользовательское прерывание сигнализируется возбуждением исключения KeyboardInterrupt.

    Инструкция try работает следующим образом.

    Сначала выполняется предложение try (операторы между ключевыми словами try и exclude).

    Если исключения не возникает, за исключением предложения пропускается и выполнение оператора try завершается.

    Если во время выполнения предложения try возникает исключение, остальная часть предложения пропускается. Затем, если его тип соответствует исключению, названному в честь ключевого слова exclude, выполняется предложение exclude, а затем выполнение продолжается после блока try/except.

    Если возникает исключение, которое не соответствует исключению, указанному в за исключением предложения, оно передается внешним операторам try; если обработчик не найден, это необработанное исключение, и выполнение останавливается с сообщением, как показано выше.

    У оператора try может быть более одного за исключением предложения, чтобы указать обработчики для разных исключений. Выполняется не более одного обработчика. Обработчики обрабатывают только те исключения, которые возникают в соответствующем предложении try, а не в других обработчиках того же оператора try. Предложение исключения может называть несколько исключений в виде кортежа в скобках, например:

    Класс в предложении исключения совместим с исключением, если это тот же класс или его базовый класс (но не наоборот — предложение исключения, перечисляющее производный класс, несовместимо с базовым классом). Например, следующий код напечатает B, C, D в таком порядке:

    Обратите внимание, что если бы исключающие предложения были перевернуты (с первым исключением B), были бы напечатаны B, B, B — срабатывает первое соответствующее предложение exclude.

    Все исключения наследуются от BaseException , поэтому его можно использовать в качестве подстановочного знака. Используйте это с особой осторожностью, так как таким образом легко замаскировать настоящую ошибку программирования! Его также можно использовать для вывода сообщения об ошибке, а затем повторного вызова исключения (что позволяет вызывающей стороне также обрабатывать исключение):

    Кроме того, последнее предложение exclude может не указывать имена исключений, однако тогда значение исключения должно быть получено из sys.exc_info()[1] .

    У оператора try … кроме необязательного предложения else, которое, если оно присутствует, должно следовать за всеми предложениями кроме. Это полезно для кода, который должен выполняться, если предложение try не вызывает исключения. Например:

    Использование предложения else лучше, чем добавление дополнительного кода в предложение try, потому что оно позволяет избежать случайного перехвата исключения, которое не было вызвано кодом, защищенным оператором try … кроме.

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

    В предложении except после имени исключения может быть указана переменная. Переменная привязана к экземпляру исключения с аргументами, хранящимися в instance.args. Для удобства экземпляр исключения определяет __str__(), чтобы аргументы можно было распечатать напрямую, без ссылки на .args. Можно также сначала создать экземпляр исключения, прежде чем вызывать его, и добавить к нему любые атрибуты по желанию.

    Если у исключения есть аргументы, они печатаются как последняя часть («подробности») сообщения для необработанных исключений.

    Обработчики исключений обрабатывают исключения не только в том случае, если они возникают непосредственно в предложении try, но и в тех случаях, когда они возникают внутри функций, вызываемых (даже косвенно) в предложении try. Например:

    8.4. Вызов исключений¶

    Инструкция повышения позволяет программисту принудительно вызвать указанное исключение. Например:

    Единственный аргумент для повышения указывает на возбуждаемое исключение. Это должен быть либо экземпляр исключения, либо класс исключения (класс, производный от Exception ). Если передается класс исключения, он будет неявно создан путем вызова его конструктора без аргументов:

    Если вам нужно определить, было ли возбуждено исключение, но вы не собираетесь его обрабатывать, более простая форма оператора повышения позволяет повторно инициировать исключение:

    8.5. Цепочка исключений¶

    Инструкция повышения допускает необязательный параметр from, который включает цепочку исключений. Например:

    Это может быть полезно при преобразовании исключений. Например:

    Цепочка исключений происходит автоматически, когда исключение вызывается внутри раздела exclude или finally. Это можно отключить, используя идиому from None:

    Дополнительную информацию о механизме объединения см. в разделе Встроенные исключения .

    8.6. Пользовательские исключения¶

    Программы могут называть свои собственные исключения, создавая новый класс исключений (дополнительную информацию о классах Python см. в разделе Классы). Исключения обычно должны быть производными от класса Exception прямо или косвенно.

    Могут быть определены классы исключений, которые делают то же, что и любой другой класс, но обычно остаются простыми, часто предлагая только ряд атрибутов, которые позволяют обработчикам исключения извлекать информацию об ошибке.

    Большинство исключений определяются с именами, оканчивающимися на "Ошибка", аналогично именам стандартных исключений.

    Многие стандартные модули определяют свои собственные исключения для сообщения об ошибках, которые могут возникнуть в определяемых ими функциях. Более подробная информация о классах представлена ​​в главе Классы.

    8.7. Определение действий по очистке¶

    У оператора try есть еще одно необязательное предложение, предназначенное для определения действий по очистке, которые должны выполняться при любых обстоятельствах. Например:

    Если присутствует предложение finally, оно будет выполняться как последняя задача перед завершением оператора try. Предложение finally выполняется независимо от того, создает ли оператор try исключение. В следующих пунктах обсуждаются более сложные случаи, когда возникает исключение:

    Если во время выполнения предложения try возникает исключение, это исключение может быть обработано предложением exclude. Если исключение не обрабатывается предложением exclude, исключение возникает повторно после выполнения предложения finally.

    Исключение может возникнуть во время выполнения предложения exclude или else. Опять же, исключение повторно вызывается после того, как предложение finally было выполнено.

    Если в предложении finally выполняется оператор break , continue или return, исключения не вызываются повторно.

    Если оператор try достигает оператора break , continue или return, предложение finally будет выполняться непосредственно перед выполнением оператора break , continue или return.

    Если предложение finally включает оператор return, возвращаемое значение будет значением из оператора return предложения finally, а не значением из оператора return предложения try.

    Более сложный пример:

    Как видите, предложение finally выполняется при любом событии. Ошибка TypeError, вызванная разделением двух строк, не обрабатывается предложением exclude и, следовательно, возникает повторно после выполнения предложения finally.

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

    8.8. Предопределенные действия по очистке¶

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

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

    После выполнения оператора файл f всегда закрывается, даже если при обработке строк возникла проблема. Объекты, которые, как и файлы, предоставляют предопределенные действия по очистке, будут указывать это в своей документации.

    error( msg ) выдает ошибку и отображает сообщение об ошибке.

    error( msg , A1. An ) отображает сообщение об ошибке, которое содержит символы преобразования форматирования, такие как те, которые используются с функцией MATLAB® sprintf. Каждый символ преобразования в msg преобразуется в одно из значений A1. .

    error( errID , ___ ) включает идентификатор ошибки в исключении. Идентификатор позволяет вам различать ошибки и управлять тем, что происходит, когда MATLAB обнаруживает ошибки. Вы можете включить любой из входных аргументов в предыдущих синтаксисах.

    error( errorStruct ) выдает ошибку, используя поля в скалярной структуре.

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

    Примеры

    Выдать ошибку

    Выдать ошибку с отформатированным сообщением

    Отформатированное сообщение об ошибке с разрывом строки.Вы должны указать более одного входного аргумента с ошибкой, если вы хотите, чтобы MATLAB преобразовывал специальные символы (такие как \n ) в сообщении об ошибке. Включить информацию о классе переменной n в сообщение об ошибке.

    Если вы используете только один входной аргумент с ошибкой, то MATLAB не преобразует \n в разрыв строки.

    Выдать ошибку с идентификатором.

    Используйте MException.last для просмотра последнего необработанного исключения.

    Выдать ошибку, используя структуру

    Создайте структуру с полями сообщения и идентификатора. Чтобы упростить пример, не используйте поле стека.

    Сбросить ошибку.

    Выдать ошибку с предлагаемым исправлением

    Создайте функцию hello, которая требует один входной аргумент. Добавьте предлагаемый входной аргумент «мир» в сообщение об ошибке.

    Вызовите функцию без аргумента.

    Входные аргументы

    msg — Информация об ошибке
    текстовый скаляр, содержащий спецификацию формата

    Информация об ошибке в виде текстового скаляра, содержащего спецификацию формата. Это сообщение отображается как сообщение об ошибке. Чтобы отформатировать сообщение, используйте escape-последовательности, такие как \t или \n . Вы также можете использовать любые спецификаторы формата, поддерживаемые функцией sprintf, такие как %s или %d . Укажите значения для спецификаторов преобразования через файл A1. Входные аргументы. Дополнительные сведения см. в разделе Форматирование текста.

    Примечание

    Вы должны указать более одного входного аргумента с ошибкой, если хотите, чтобы MATLAB преобразовывал специальные символы (например, \t , \n , %s и %d ) в сообщении об ошибке.

    Пример: "Файл не найден".

    errID — идентификатор ошибки
    текстовый скаляр, содержащий компоненты и мнемонические поля

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

    Идентификатор ошибки включает одно или несколько полей component и поле мнемоники. Поля должны быть разделены двоеточием. Например, идентификатор ошибки с компонентом поля component и мнемоническим полем mnemonic указывается как 'component:mnemonic' . Компонент и мнемонические поля должны начинаться с буквы. Остальные символы могут быть буквенно-цифровыми (A–Z, a–z, 0–9) и символами подчеркивания. В errID нигде не должно быть пробелов. Дополнительные сведения см. в разделе MException .

    Пример: 'MATLAB:singularMatrix'

    Пример: 'MATLAB:narginchk:notEnoughInputs'

    А1. An — Значения
    вектор символов | строковый скаляр | числовой скаляр

    Значения, которые заменяют спецификаторы преобразования в msg в виде вектора символов, строкового скаляра или числового скаляра.

    errorStruct — информация об ошибках
    скалярная структура

    Информация об ошибках в отчетах в виде скалярной структуры. Структура должна содержать хотя бы одно из этих полей.

    Сообщение об ошибке. Дополнительную информацию см. в сообщении .

    Идентификатор ошибки. Дополнительные сведения см. в разделе errID .

    Поле стека для ошибки. Когда errorStruct включает поле стека, error использует его для установки поля стека ошибки. Когда вы указываете stack , используйте абсолютное имя файла и всю последовательность функций, которая вкладывает функцию в кадр стека. Этот вектор символов совпадает с вектором, возвращаемым dbstack('-completenames') .

    correction — Предлагаемое исправление для этого исключения
    matlab.lang.correction.AppendArgumentsCorrection object | объект matlab.lang.correction.ConvertToFunctionNotationCorrection | объект matlab.lang.correction.ReplaceIdentifierCorrection

    Когда вы выдаете ошибку, MATLAB собирает информацию о ней и сохраняет ее в структуре данных, являющейся объектом класса MException. Вы можете получить доступ к информации в объекте исключения, используя try/catch . Или, если ваша программа завершается из-за исключения и возвращает управление командной строке, вы можете использовать MException.last .

    MATLAB не прекращает выполнение программы, если в блоке try возникает ошибка. В этом случае MATLAB передает управление блоку catch.

    Если все входные данные для ошибки пусты, MATLAB не выдает ошибку.

    Расширенные возможности

    Генерация кода C/C++
    Создайте код C и C++ с помощью MATLAB® Coder™.

    Примечания и ограничения по использованию:

    Не влияет на автономный код, даже если включено обнаружение ошибок во время выполнения. См. раздел Генерация автономного кода C/C++, который обнаруживает и сообщает об ошибках времени выполнения (MATLAB Coder) .

    Среда на основе потоков
    Выполнение кода в фоновом режиме с помощью MATLAB® backgroundPool или ускорение кода с помощью Parallel Computing Toolbox™ ThreadPool.

    Эта функция полностью поддерживает среды на основе потоков. Для получения дополнительной информации см. раздел «Выполнение функций MATLAB в многопоточной среде».

    Массивы графических процессоров
    Ускорьте код, запустив его на графическом процессоре (GPU) с помощью Parallel Computing Toolbox™.

    Примечания и ограничения по использованию:

    Эта функция принимает массивы GPU, но не работает на GPU.

    Дополнительную информацию см. в разделе Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).

    Читайте также: