В серии: Библиотека alt м. В. Сысоева, И. В. Сысоев


Ошибки, выявляемые интерпретатором


Download 0.87 Mb.
bet38/40
Sana23.04.2023
Hajmi0.87 Mb.
#1387407
TuriКнига
1   ...   32   33   34   35   36   37   38   39   40
Bog'liq
Боши Лекция Парадигма и методы программирование

3.4.2 Ошибки, выявляемые интерпретатором


Если вы успешно справились с синтаксисом, другие ошибки за вас может выявить интерпретатор во время исполнения программы. Интерпретатор даже напишет, что это за ошибка и в какой она строчке кода (рис. 3.2).
Ошибки, выявляемые интерпретатором, также называются ошибками времени исполнения. Самые распространённые из них — ошибки пространства имён. Это такие ошибки, когда имя функции, метода или введённой вами же переменной написано неверно. Кроме них часто возникают ошибки неверной типизации и

Рис. 3.2. Пример ошибки, выявляемой интерпретатором во время исполнения.
ошибки, связанные с недопустимыми операциями с памятью компьютера. Далее основные ошибки разобраны более подробно:
1. NameError — ошибка в имени. Вот пример неправильно написанного имени стандартной функции range:
N = ( (’Введите N: ’)) s = 0 i rnage(N): s = s + i**2
При попытке выполнить этот код получится следующее:
Traceback (most recent call last):
File "/home/paelius/test_error.py", line 3, in for i in rnage(N):
NameError: name ’rnage’ is not defined
Как видим, интерпретатор, дойдя до строчки с ошибкою, указал нам, что имя rnage ему неизвестно (NameError: name ’rnage’ is not defined). Найти и исправить такие ошибки обычно довольно просто, в том числе, благодаря тому, что все встроенные функции (range, len, sorted, sum, int и другие) выделяются цветом (в IDLE это фиолетовый). Поэтому вы можете контролировать себя уже на этапе написания кода: если range не подсветилось, значит, вы написали что-то неверно. Аналогично другим — жёлтым — цветом выделяются встроенные операторы и их части: in, for, while, if, else, from, import, as, with, break, continue, а также встроенные значения: True, False и None.
2. AttributeError — ошибочный атрибут. NameError — не единственная лексическая ошибка. Перепишем задачу так, что сначала положим все квадраты чисел в список, а затем воспользуемся стандартной функцией sum:
l = [] i (N):
l.apend(i**2)
( (l))
В этой программе есть одна трудно уловимая ошибка: в методе append пропущена одна буква p. В результате мы получим:
AttributeError:
Traceback (most recent call last):
File "/home/paelius/test_error.py", line 4, in
l.apend(i**2)
AttributeError: ’list’ object has no attribute ’apend’
Интерпретатор указывает нам, что объект данного типа не имеет атрибута (метода или поля) apend. Поскольку методы даже стандартных объектов таких, как список, никак не подсвечиваются, обнаружить эту ошибку заранее сложно. Плюс в том, что исправление подобной ошибки не составит труда. Есть, однако, один способ снизить вероятность их появления: для длинных методов, имя которых вы плохо помните, лучше пользоваться автодополнением.

  1. TypeError — ошибка типов. Всегда следует помнить, что в третьей версии Python функция input() возвращает строковую переменную. Если попробовать написать что-то подобное:

a = () b = ()
(a/b) то получим ошибку:
Traceback (most recent call last):
File "E:/Python/1.py", line 3, in print(a/b)
TypeError: unsupported operand type(s) for /: ’str’ and ’str’
Для выявления подобных ошибок полезно выводить на экран тип переменной командою print(type(a)).

  1. ValueError — ошибка значения, являющаяся ещё одним видом ошибок, связанных с типами данных. Она возникает, например, при попытке извлечь корень из отрицательного числа. Причём интересно, что ошибка будет выдана только при использовании функции sqrt из модуля math, а при возведении в степень стандартным образом с помощью оператора ** число будет просто конвертировано в комплексное:

>>> (-3)**(1/2)
(1.0605752387249068e-16+1.7320508075688772j)
>>> math
>>> math.sqrt(-3)
Traceback (most recent call last):
File "
", line 1, math.sqrt(-3)
ValueError: math domain error

  1. IndexError — ошибка индекса. Появляется при обращении к несуществующему элементу строки или списка:

>>> L = ( (10))
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> L[10]
Traceback (most recent call last):
File "
", line 1,
L[10]
IndexError: index out of

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

p = 1.5 i (2, 100): p = p**i
(p)
В результате будет выдана ошибка:
Traceback (most recent call last):
File "E:/Python/1.py", line 3, p = p**i
OverflowError: (34, ’ResultЂtooЂlarge’)

Download 0.87 Mb.

Do'stlaringiz bilan baham:
1   ...   32   33   34   35   36   37   38   39   40




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling