Значения исключений и ошибок в python

Содержание:

что делает » TabError: непоследовательное использование вкладок и пробелов в отступах» означает?

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

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

мы действительно смешанные пробелы и знаки табуляции для отступов.

особых случаях

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

Например:

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

как вы можете видеть, запуск вашего кода таким образом может создать таинственные ошибки. Хотя программа визуально кажется, все в порядке, Python запутался, пытаясь разобрать вкладки и пробелы, используемые для отступов и ошибок.

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

исправить

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

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

многие редакторы, такие как PyCharm и SublimeText есть опции для автоматического преобразования вкладок в пробелы. Есть также несколько он-лайн инструментов, таких как Вкладки В Пробелы или Browserling это позволяет быстро изменить отступ кода. Есть также инструменты, написанные на Python. autopep8 например, может автоматически повторно отступать ваш код и другие ошибки отступа, а также.

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

Вот почему важно всегда правильно отступать от кода с самого начала

что означает» IndentationError: ожидаемый отступ блока»?

эта ошибка возникает, когда Python видит ‘заголовок’ для составной оператор, например, или но тело составного оператора или блок никогда не определяется. Например, в приведенном ниже коде мы начали утверждение, но мы никогда не определяем тело для утверждения:

в этом втором примере, мы начали писать цикл, но мы забываем отступ тело цикла. Поэтому Python по-прежнему ожидает отступом на петли тело:

комментарии не считаются органы:

исправить

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

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

Другим распространенным случаем является то, что по какой-то причине пользователь может не захотеть определить фактическое тело для составного оператора или тело может быть прокомментировано. В этом случае оператор можно использовать. The оператор может использоваться везде, где Python ожидает один или несколько операторов в качестве заполнителя. :

вот приведенный выше пример с оператор исправлен с помощью ключевые слова:

мне все еще трудно с синтаксисом отступов Python. Что мне делать?

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

  • получите редактор, который сообщит вам, когда у вас есть ошибка отступа. Некоторые товары, как сказано выше,PyCharm, SublimeText и Jupyter Notebook.
  • когда вы отступаете свой код, подсчитайте вслух для себя, сколько раз вы нажимаете пробел (или клавишу tab). Например, если вам нужно, чтобы отступ строчка на четыре пробела, вы бы сказали вслух»один, два, три, четыре » при одновременном нажатии пробела каждый раз. Это звучит глупо, но это помогает тренировать ваш мозг, чтобы думать о том, как глубоко вы отступаете свой код.
  • если у вас есть редактор, посмотрите, есть ли у него возможность автоматически конвертировать вкладки в пробелы.
  • Просмотр кода других. Обзор github или Stackoverflow и см. примеры кода Python.
  • просто писать код. Это единственный лучший способ стать лучше. Чем больше вы пишете код Python, тем лучше вы получите.

Как мне отступать мой код?

Основное правило, если отступы кода Python (учитывая, что вы обрабатываете всю программу как «базовый блок»), это: Первый оператор в базовом блоке, и каждый последующий оператор после него должен иметь отступы на одну и ту же сумму.

Итак, технически следующая программа Python верна:

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

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

Ошибка рекурсии (RecursionError)

Эта ошибка связана со стеком и происходит при вызове функций. Как и предполагает название, ошибка рекурсии возникает, когда внутри друг друга исполняется много методов (один из которых — с бесконечной рекурсией), но это ограничено размером стека.

Все локальные переменные и методы размещаются в стеке. Для каждого вызова метода создается стековый кадр (фрейм), внутрь которого помещаются данные переменной или результат вызова метода. Когда исполнение метода завершается, его элемент удаляется.

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

Настройка IDE для работы с отступами

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

Рассмотрим, как можно настроить или изменить такие параметры в самых популярных IDE, когда возникает такая необходимость.

PyCharm

В случае использования интегрированной среды разработки PyCharm для настройки оформления отступов необходимо последовательно перейти по таким пунктам меню:

Для настроек параметров есть 3 поля:

  1. Tab size – количество пробелов при нажатии клавиши Tab;
  2. Indent – количество пробелов для одного отступа;
  3. Continuation indent – количество пробелов для отступа, когда следующая строка продолжает предыдущую.

Еще одна полезная опция – отображение точек вместо каждого пробела, что особо удобно при поддержке чужого кода. В PyCharm для активации этой функции следует перейти , установив галочку напротив соответствующего пункта.

VSCode

Для настройки аналогичных функций в VSCode нужно нажать комбинацию клавиш ctrl + , или перейти по пунктам меню

Далее для ускорения в строке поиска ввести tab и установить нужные значения для таких опций:

  • editor: insert spaces – использовать ли пробелы вместо табуляции;
  • editor: tab size – желаемое количество пробелов для одного отступа.

Что означает « >>> if True : … File » » , строка 2 ^ IndentationError : ожидается, что отступы : неожиданный отступ» означает?

проблема

Эта ошибка возникает, когда оператор излишне с отступом или его отступ не совпадает с отступом прежних операторов в том же блоке. Например, первый оператор в приведенной ниже программе излишне отступом:

В этом примере строка в блоке не соответствует отступу любого предыдущего оператора:

исправлять

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

Однако >>> names = ‘sarah’ , ‘lucy’ , ‘michael’ >>> для имени в именах … print ( name ) # Тело цикла for теперь правильно отступом. …
sarah lucy michael, вы уверены, что строка должна быть отступом, отступ должен совпадать с строкой прежнего оператора в том же блоке. Во втором примере, описанном выше , мы можем исправить ошибку, убедившись, что строка с отступом находится на том же уровне, что и предыдущие утверждения в теле:

Почему табуляция в Питоне так важна?

Что такое отступ? Говоря простыми словами, это просто добавление пробела перед определенным оператором.

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

Многим программистам жесткое соблюдение отступов может показаться избыточной мерой. Однако именно из-за строго соблюдения правил форматирования, код на Python – чистый, понятный и аккуратный. Отсюда следующие плюсы :

  • Не нужно проверять, не потерялась ли лишняя скобка;
  • Читать такой код удобнее (по «Философии Python» – читаемость имеет значение);
  • Легче работать со сторонними библиотеками;
  • Код вашего коллеги будет максимально похож на ваш код;

Чтобы понять, насколько это важно, можно представить ситуацию, когда в книге удалить все номера страниц, в результате чего нельзя будет понять, где продолжать чтение. Без использования indent-отступа интерпретатор Python не сможет определить, какой оператор необходимо выполнять следующим, что относится к разным блокам кода

В результате и возникает исключение типа .

В большинстве других языков, таких как семейство C, Java и прочих для оформления блоков используются фигурные скобки, в Питоне – отступы, для создания которых обычно используются пробелы. Все команды, отделенные от начала строки одним и тем же расстоянием, принадлежат к одному и тому же блоку. Если в нем выделяется еще один блок – используется еще один отступ вправо, и так далее. Рассмотрим это на примере:

По умолчанию в Python используется 4 пробела в качестве отступа

Однако программист может использовать и другое их количество, но не менее одного.

Что означает «-tt: непоследовательное использование вкладок и пробелов в отступе»?

проблема

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

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

Мы видим, что у нас действительно смешанные пространства и вкладки для отступов.

Особые случаи

Примечание. Python не всегда будет поднимать, если вы смешиваете вкладки и пробелы в своей программе. Если программный отступ однозначен, Python позволяет перемещать вкладки и пробелы. Например:

И иногда Python просто задыхается от смеси вкладок и пробелов и ошибочно вызывает исключение, когда это будет более подходящим. Другой пример:

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

Это отличные примеры, демонстрирующие, почему никогда не смешивать вкладки и пробелы и использовать флаги и интерпретаторы при использовании Python 2.

исправлять

Если ваша программа коротка, возможно, самым простым и быстрым решением является просто перетаскивание программы. Убедитесь, что каждый оператор имеет отступы с четырьмя пробелами на уровень отступов (см. Раздел « Как отменить мой код?» ).

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

Многие редакторы, такие как PyCharm и SublimeText, имеют возможности автоматического преобразования вкладок в пробелы. Существует также несколько интерактивных инструментов, таких как « Вкладки в пробелы» или « Браузер», которые позволяют вам быстро отменить свой код. Есть также инструменты, написанные на Python. Например, autopep8 может автоматически переустанавливать ваш код и другие ошибки отступов.

Даже самые лучшие инструменты, хотя иногда не смогут исправить все ваши ошибки в отступлении, и вам придется исправить их вручную

Вот почему важно всегда правильно отступать от кода с самого начала

Что означает «IndentationError: unindent не соответствует внешнему уровню отступа»?

проблема

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

Эта ошибка особенно трудно поймать, потому что даже одно место приведет к сбою вашего кода.

исправлять

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

Мне все еще сложно с синтаксисом отступа Python. Что я делаю?

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

  • Получите редактор, который скажет вам, когда у вас ошибка с отступом. Некоторые товары, как сказано выше, — PyCharm , SublimeText и Jupyter Notebook .
  • Когда вы вставляете свой код, подсчитывайте себе, сколько раз вы нажимаете клавишу пробела (или клавишу табуляции). Например, если вам нужно отстудить строку на четыре пробела, вы бы сказали громко « один , два , три , четыре », одновременно повторяя пробел. Это звучит глупо, но это помогает обучить ваш мозг думать о том, насколько глубоко вы отступаете от своего кода.
  • Если у вас есть редактор, посмотрите, есть ли у него возможность автоматически конвертировать вкладки в пробелы.
  • Просмотреть код других. Просмотрите github или Stackoverflow и посмотрите примеры кода Python.
  • Просто напишите код. Это лучший способ стать лучше. Чем больше вы пишете код Python, тем лучше вы получите.

Почему имеет значение отступы?

В Python отступ используется для разграничения блоков кода . Это d def perm ( l ): # Вычислить список всех перестановок l, если len ( l )

Из — за этого, пользователи Python должны обратить пристальное внимание , когда и как они отступают от их кода, потому что пробелы имеют значение

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

Немного истории

Исторические причины can_drive = Истинно, почему Python использует отступы и, возможно, более общепринятые фигурные скобки изложены в статье истории Python Гвидо ван Россумом — создателем Python:

почему отступ имеет значение?

в Python отступ используется для разграничения блоки кода. Это отличается от многих других языков, которые используют фигурные скобки для разграничения блоков, таких как Java, Javascript и C

Из-за этого пользователи Python должны уделять пристальное внимание тому, когда и как они отступают от своего кода, потому что имеет значение пробел

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

немного истории

исторические причины того, почему Python использует отступы против, возможно, более общепринятых фигурных скобок изложена в статья из истории Python Гвидо ван Россума — создатель Python:

Стандартные ошибки (StandardError)

Рассмотрим некоторые базовые ошибки в программировании.

Арифметические ошибки (ArithmeticError)

  • Ошибка деления на ноль (Zero Division);
  • Ошибка переполнения (OverFlow);
  • Ошибка плавающей точки (Floating Point);

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

Деление на ноль (ZeroDivisionError)

Когда делитель (второй аргумент операции деления) или знаменатель равны нулю, тогда результатом будет ошибка деления на ноль.

Переполнение (OverflowError)

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

Ошибка утверждения (AssertionError)

Когда инструкция утверждения не верна, вызывается ошибка утверждения.

Рассмотрим пример. Предположим, есть две переменные: и . Их нужно сравнить. Чтобы проверить, равны ли они, необходимо использовать ключевое слово , что приведет к вызову исключения в том случае, если выражение будет ложным.

Ошибка атрибута (AttributeError)

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

Ошибка импорта (ModuleNotFoundError)

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

Ошибка поиска (LookupError)

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

Здесь есть два вида исключений:

  • Ошибка индекса ();
  • Ошибка ключа ();

Ошибка индекса

Если пытаться получить доступ к индексу (последовательности) списка, которого не существует в этом списке или находится вне его диапазона, будет вызвана ошибка индекса (IndexError: list index out of range python).

Ошибка имени (NameError)

Ошибка имени возникает, когда локальное или глобальное имя не находится.

В следующем примере переменная не определена. Результатом будет ошибка .

Ошибка выполнения (Runtime Error)

Ошибка «NotImplementedError» Ошибка выполнения служит базовым классом для ошибки . Абстрактные методы определенного пользователем класса вызывают это исключение, когда производные методы перезаписывают оригинальный.

Ошибка типа (TypeError)

Ошибка типа вызывается при попытке объединить два несовместимых операнда или объекта.

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

Ошибка значения (ValueError)

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

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

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

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

Это можно сделать, создав новый класс, который будет наследовать из класса в Python.

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

Недостатки обработки исключений в Python

У использования исключений есть свои побочные эффекты, как, например, то, что программы с блоками try-except работают медленнее, а количество кода возрастает.

Дальше пример, где модуль Python используется для проверки времени исполнения 2 разных инструкций. В для обработки используется try-except, а в — . Затем они выполняются 10000 раз с переменной . Суть в том, чтобы показать разницу во времени исполнения инструкций. Так, с обработкой исключений занимает больше времени чем , который просто проверяет значение и не делает ничего, если условие не выполнено.

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

Исключения

Даже если синтаксис в инструкции или само выражение верны, они все равно могут вызывать ошибки при исполнении. Исключения Python — это ошибки, обнаруживаемые при исполнении, но не являющиеся критическими. Скоро вы узнаете, как справляться с ними в программах Python. Объект исключения создается при вызове исключения Python. Если скрипт не обрабатывает исключение явно, программа будет остановлена принудительно.

Программы обычно не обрабатывают исключения, что приводит к подобным сообщениям об ошибке:

Ошибка деления на ноль (ZeroDivisionError)

Есть разные типы исключений в Python и их тип выводится в сообщении: вверху примеры и . Обе строки в сообщениях об ошибке представляют собой имена встроенных исключений Python.

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

Теперь рассмотрим встроенные исключения Python.

Могу ли я использовать вкладки?

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

Обратите внимание, однако одно большое предостережение — не использовать обе вкладки и пробелы для отступов. Это может привести к тому, что все типы странных трудно отлаживать ошибки отступов

Python расширяет вкладки до следующего 8-го столбца, но >>> age = 10 >>> can_drive = Нет >>> >>> if age > = 18 … print ( ‘Вы можете управлять’ ) … can_drive = True # отступ этой строки на том же уровне. … ваш редактор настроен на размер вкладок в 4 столбца, или вы используете пробелы, а также вкладки, вы можете легко создавать отступы, которые отлично смотрятся в вашем редакторе, но Python откажется работать. Компилятор Python 3 явно отклоняет любую программу, содержащую неоднозначную смесь вкладок и пробелов, обычно путем поднятия . Однако по умолчанию в Python 2 по-прежнему разрешены микширование вкладок и пробелов, но настоятельно рекомендуется не использовать эту «функцию». Используйте и командную строку флагов , чтобы заставить Python-поднять предупреждение или (предпочтительно) ошибки соответственно. :

можно ли использовать вкладки?

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

обратите внимание, однако одно большое предостережение не использовать обе вкладки и пробелы для отступов. Это может привести к всевозможным странным трудным для отладки ошибкам отступов

Python расширяет вкладки до следующего 8-го столбца, но если ваш редактор имеет размер вкладки 4 столбца, или вы используете пробелы, а также вкладки, вы можете легко создать отступ код, который выглядит отлично в вашем редакторе, но Python откажется работать. Компилятор Python 3 явно отклоняет любую программу, содержащую неоднозначную смесь вкладок и пробелов, обычно поднимая . Однако, по умолчанию, смешивание вкладок и пробелов все еще разрешено в Python 2, но настоятельно рекомендуется не использовать эту «функцию». Используйте и флаги командной строки, чтобы заставить Python 2 поднять предупреждение или (предпочтительно) ошибку соответственно. :

как сделать отступ мой код?

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

так что технически следующие программы правильно:

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

следует использовать:

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

Недостаточно памяти (OutofMemoryError)

Ошибки памяти чаще всего связаны с оперативной памятью компьютера и относятся к структуре данных под названием “Куча” (). Если есть крупные объекты (или) ссылки на подобные, то с большой долей вероятности возникнет ошибка . Она может появиться по нескольким причинам:

  • Использование 32-битной архитектуры Python (максимальный объем выделенной памяти невысокий, между 2 и 4 ГБ);
  • Загрузка файла большого размера;
  • Запуск модели машинного обучения/глубокого обучения и много другое;

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

Но поскольку Python использует архитектуру управления памятью из языка C (функция ), не факт, что все процессы восстановятся — в некоторых случаях приведет к остановке. Следовательно, обрабатывать такие ошибки не рекомендуется, и это не считается хорошей практикой.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector