Error traceback most recent call last

Исключения (exceptions) – ещё один тип данных в python. Исключения необходимы для того, чтобы сообщать программисту об ошибках.

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

Разберём это сообщение подробнее: интерпретатор нам сообщает о том, что он поймал исключение и напечатал информацию (Traceback (most recent call last)).

Далее имя файла (File ""). Имя пустое, потому что мы находимся в интерактивном режиме, строка в файле (line 1);

Выражение, в котором произошла ошибка (100 / 0).

Название исключения (ZeroDivisionError) и краткое описание исключения (division by zero).

Разумеется, возможны и другие исключения:

В этих двух примерах генерируются исключения TypeError и ValueError соответственно. Подсказки дают нам полную информацию о том, где порождено исключение, и с чем оно связано.

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

  • BaseException – базовое исключение, от которого берут начало все остальные.
  • SystemExit – исключение, порождаемое функцией sys.exit при выходе из программы.
  • KeyboardInterrupt – порождается при прерывании программы пользователем (обычно сочетанием клавиш Ctrl+C).
  • GeneratorExit – порождается при вызове метода close объекта generator.
  • Exception – а вот тут уже заканчиваются полностью системные исключения (которые лучше не трогать) и начинаются обыкновенные, с которыми можно работать.
  • StopIteration – порождается встроенной функцией next, если в итераторе больше нет элементов.
  • ArithmeticError – арифметическая ошибка.
  • FloatingPointError – порождается при неудачном выполнении операции с плавающей запятой. На практике встречается нечасто.
  • OverflowError – возникает, когда результат арифметической операции слишком велик для представления. Не появляется при обычной работе с целыми числами (так как python поддерживает длинные числа), но может возникать в некоторых других случаях.
  • ZeroDivisionError – деление на ноль.
  • AssertionError – выражение в функции assert ложно.
  • AttributeError – объект не имеет данного атрибута (значения или метода).
  • BufferError – операция, связанная с буфером, не может быть выполнена.
  • EOFError – функция наткнулась на конец файла и не смогла прочитать то, что хотела.
  • ImportError – не удалось импортирование модуля или его атрибута.
  • LookupError – некорректный индекс или ключ.
      Читайте также:  Видеоконференция в локальной сети бесплатно
    • IndexError – индекс не входит в диапазон элементов.
    • KeyError – несуществующий ключ (в словаре, множестве или другом объекте).
    • MemoryError – недостаточно памяти.
    • NameError – не найдено переменной с таким именем.
      • UnboundLocalError – сделана ссылка на локальную переменную в функции, но переменная не определена ранее.
      • OSError – ошибка, связанная с системой.
        • BlockingIOError
        • ChildProcessError – неудача при операции с дочерним процессом.
        • ConnectionError – базовый класс для исключений, связанных с подключениями.
          • BrokenPipeError
          • ConnectionAbortedError
          • ConnectionRefusedError
          • ConnectionResetError
          • FileExistsError – попытка создания файла или директории, которая уже существует.
          • FileNotFoundError – файл или директория не существует.
          • InterruptedError – системный вызов прерван входящим сигналом.
          • IsADirectoryError – ожидался файл, но это директория.
          • NotADirectoryError – ожидалась директория, но это файл.
          • PermissionError – не хватает прав доступа.
          • ProcessLookupError – указанного процесса не существует.
          • TimeoutError – закончилось время ожидания.
          • ReferenceError – попытка доступа к атрибуту со слабой ссылкой.
          • RuntimeError – возникает, когда исключение не попадает ни под одну из других категорий.
          • NotImplementedError – возникает, когда абстрактные методы класса требуют переопределения в дочерних классах.
          • SyntaxError – синтаксическая ошибка.
            • IndentationError – неправильные отступы.
              • TabError – смешивание в отступах табуляции и пробелов.
              • SystemError – внутренняя ошибка.
              • TypeError – операция применена к объекту несоответствующего типа.
              • ValueError – функция получает аргумент правильного типа, но некорректного значения.
              • UnicodeError – ошибка, связанная с кодированием / раскодированием unicode в строках.
                • UnicodeEncodeError – исключение, связанное с кодированием unicode.
                • UnicodeDecodeError – исключение, связанное с декодированием unicode.
                • UnicodeTranslateError – исключение, связанное с переводом unicode.
                • Warning – предупреждение.
                • Теперь, зная, когда и при каких обстоятельствах могут возникнуть исключения, мы можем их обрабатывать. Для обработки исключений используется конструкция try – except.

                  Первый пример применения этой конструкции:

                  В блоке try мы выполняем инструкцию, которая может породить исключение, а в блоке except мы перехватываем их. При этом перехватываются как само исключение, так и его потомки. Например, перехватывая ArithmeticError, мы также перехватываем FloatingPointError, OverflowError и ZeroDivisionError.

                  Читайте также:  Pci ven 1002 dev 6760 cc 030000

                  Также возможна инструкция except без аргументов, которая перехватывает вообще всё (и прерывание с клавиатуры, и системный выход и т. д.). Поэтому в такой форме инструкция except практически не используется, а используется except Exception. Однако чаще всего перехватывают исключения по одному, для упрощения отладки (вдруг вы ещё другую ошибку сделаете, а except её перехватит).

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

                  I am trying to implement binary adder for 4 bits. I get the following error. What’s the problem with line 22 ? I don’t understand why there is an out of range error.

                  1 Answer 1

                  You start off with this:

                  So result has no values.

                  The first time through the loop, x is 0 , and you try to reassign result[0] to either 0 or 1 . But there is no result[0] . So you get an IndexError .

                  You can see the same thing in a much simpler example:

                  You either need to reorganize your code so that you append or prepend the bits as you get them, or you need to pre-fill result with, e.g., [None, None, None, None] or [0, 0, 0, 0] or something else so that result[0] makes sense.

                  I am more interested in the first error which occurs at line 85.

                  You don’t really have an error at line 85. Notice that the traceback shows "most recent call last":

                  The result[x] = 0 at line 22, in adder , raised an IndexError because x is 0 and result is empty.

                  Читайте также:  Как включить планшет если не работает кнопка

                  The adder(number1,number2,op) at line 85, at the top level of the module, raised an IndexError because it called a function that raised an IndexError and didn’t have a try: / except IndexError: (or some superclass of IndexError ) around that call.

                  And, because that was at the top level, there’s no place higher up in your code that it could be handled, so the interpreter handles it by printing out the traceback and exiting.

                  I’m sorry for asking, but I can’t find why I’m getting this errors, especially after the program is running.

                  The erros to be exact are:

                  I don’t understand what’s happening here. Can anyone help me?

                  I do not know what is wrong. can anyone help me? Thanks you!

                  2 Answers 2

                  At the beginning of your file you set raw_input to 0. Do not do this, at it modifies the built-in raw_input() function. Therefore, whenever you call raw_input() , it is essentially calling 0() , which raises the error. To remove the error, remove the first line of your code:

                  I don’t know which version of Python you are using but I tried this in Python 3 and made a few changes and it looks like it works. The raw_input function seems to be the issue here. I changed all the raw_input functions to "input()" and I also made minor changes to the printing to be compatible with Python 3. AJ Uppal is correct when he says that you shouldn’t name a variable and a function with the same name. See here for reference:

                  My code for Python 3 is as follows:

                  I noticed a small bug in your code as well. This function should ideally convert pounds to kilograms but it looks like when it prints, it is printing "Centimeters" instead of kilograms.

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

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

                  Adblock detector