-
1
syntax error
- синтаксическая ошибка
Англо-русский словарь нормативно-технической терминологии > syntax error
-
2
syntax error
Англо-русский толковый словарь терминов и сокращений по ВТ, Интернету и программированию. > syntax error
-
3
syntax error
English-Russian base dictionary > syntax error
-
4
syntax error
English-Russian big polytechnic dictionary > syntax error
-
5
syntax error
English-Russian dictionary of Information technology > syntax error
-
6
syntax error
Большой англо-русский и русско-английский словарь > syntax error
-
7
syntax error
Универсальный англо-русский словарь > syntax error
-
8
syntax error
English-Russian electronics dictionary > syntax error
-
9
syntax error
The New English-Russian Dictionary of Radio-electronics > syntax error
-
10
syntax error
English-Russian dictionary of computer science and programming > syntax error
-
11
syntax error
Англо-русский словарь по полиграфии и издательскому делу > syntax error
-
12
syntax error
English-Russian dictionary of terms that are used in computer games > syntax error
-
13
syntax error
English-Russian dictionary of technical terms > syntax error
-
14
syntax error
синтаксическая ошибка; ошибка этапа компиляции
English-Russian information technology > syntax error
-
15
syntax error
English-Russian dictionary of computer science > syntax error
-
16
syntax error handling
Универсальный англо-русский словарь > syntax error handling
-
17
syntax
abstract syntax, BNF, concrete syntax, constructor syntax, EBNF, formal grammar, metasyntax, notation, syntax analysis, syntax analyzer, syntax checking, syntax diagram, syntax error, syntax grammar, syntax notation, syntax tree, transfer syntax, unit syntax
Англо-русский толковый словарь терминов и сокращений по ВТ, Интернету и программированию. > syntax
-
18
error
English-Russian electronics dictionary > error
-
19
error
The New English-Russian Dictionary of Radio-electronics > error
-
20
error
English-Russian dictionary of computer science and programming > error
Страницы
- Следующая →
- 1
- 2
- 3
См. также в других словарях:
-
Syntax Error — [dt. Syntaxfehler], Fehler, Syntax … Universal-Lexikon
-
Syntax error — In computer science a syntax error ( IPA: /ˈsɪntæks ɛrə(ɹ)/ ) refers to an error in the syntax of a sequence of characters or tokens that is intended to be written in a particular programming language.If a syntax error is encountered during… … Wikipedia
-
syntax error — noun an error of language resulting from code that does not conform to the syntax of the programming language syntax errors can be recognized at compilation time a common syntax error is to omit a parenthesis • Topics: ↑computer science,… … Useful english dictionary
-
syntax error — sintaksės klaida statusas T sritis automatika atitikmenys: angl. composition error; syntactic error; syntax error vok. Satzaufbaufehler, m; Syntaxfehler, m rus. синтаксическая ошибка, f pranc. erreur syntaxique, f … Automatikos terminų žodynas
-
syntax error — sintaksės klaida statusas T sritis informatika apibrėžtis ↑Klaida, kai tekstas neatitinka tam tekstui taikomų ↑sintaksės taisyklių. Tokie tekstai dažniausiai būna programos, parašytos programavimo kalba. Programavimo kalbos apibrėžiamos naudojant … Enciklopedinis kompiuterijos žodynas
-
syntax error — error in sentence construction, grammatical error, technical mistake that is a result of a grammatical exception in structure … English contemporary dictionary
-
syntax error — Error caused by incorrect programming statements in the context of the language being used … IT glossary of terms, acronyms and abbreviations
-
Syntax Error (film) — Infobox Film name = Syntax Error image size = caption = director = Andrew Lancaster producer = Miranda Culley / Josie Mason writer = Liz Doran narrator = starring = Helmut Bakaitis, Kim Cooper, Sacha Horler, Anthony Simcoe, Josh Quong Tart music … Wikipedia
-
syntax error — An error in the use of a programming language or operating system command syntax, such as misspelling a keyword or omitting a required space … Dictionary of networking
-
Syntax error — Синтаксическая ошибка … Краткий толковый словарь по полиграфии
-
syntax error — ● ►en interjection. ►ARGOT Interjection indiquant qu on n a pas compris quelque chose au cours d une discussion. Cela provient évidemment du message renvoyé par les compilateurs lorsqu on n a pas respecté la syntaxe d un langage de programmation … Dictionnaire d’informatique francophone
XpycT36 0 / 0 / 0 Регистрация: 09.01.2012 Сообщений: 6 |
||||
1 |
||||
17.01.2012, 01:50. Показов 35843. Ответов 7 Метки нет (Все метки)
Помогите плиз Добавлено через 12 минут
__________________
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
17.01.2012, 01:50 |
7 |
Puporev Почетный модератор 64272 / 47571 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
||||||||||||||||
17.01.2012, 09:02 |
2 |
|||||||||||||||
Хотя после процедуры «:» ставить не надо Правильно, но какого вы пишете
пишите Procedure
а в исполнительной части
разное количество параметров.
пропущена буква n в ground
0 |
XpycT36 0 / 0 / 0 Регистрация: 09.01.2012 Сообщений: 6 |
||||
17.01.2012, 18:33 [ТС] |
3 |
|||
ой… моя невнимательность. Спасибо Добавлено через 1 час 59 минут Если вы еще не догадались, я пишу меню.
У меня программа рисует меню и закрывается. А если я убираю строчку if key=chr(0) then
0 |
Почетный модератор 64272 / 47571 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
|
17.01.2012, 19:07 |
4 |
Вместо crt напишите wincrt;
У меня программа рисует меню и закрывается Ну без программы по одному модулю это не проверить.
Функции для стрелок «вверх и «вниз» не работают Попробуй вместо crt написать wincrt
1 |
XpycT36 0 / 0 / 0 Регистрация: 09.01.2012 Сообщений: 6 |
||||
18.01.2012, 02:18 [ТС] |
5 |
|||
Да нет, вы не поняли)) Меню пишу я и функции для стрелок тоже. Я говорю про то что код процедур для стрелок «вверх» «вниз» наверное написан неправильно тк при нажимании на стрелки ничего не происходит. Если что то вот основной код
0 |
Puporev Почетный модератор 64272 / 47571 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
||||
18.01.2012, 07:04 |
6 |
|||
XpycT36, Ты какой-то безрукий, сейчас программа не запускается потому что нет модуля Добавлено через 1 минуту
0 |
0 / 0 / 0 Регистрация: 03.05.2016 Сообщений: 1 |
|
03.05.2016, 16:29 |
7 |
Здравствуйте! Объясните пожалуйста как сделать задание не понимаю желательно на примерах Вложения удалены модератором.
0 |
Почетный модератор 64272 / 47571 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
|
03.05.2016, 16:39 |
8 |
fdsd223sdsff111, Прочитай Правила форума и подумай. Для каждого задания создай свою тему с адекватным названием и текстом, напечатанным в теме, а не на фотке. Темы создайте в нужном разделе:
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
03.05.2016, 16:39 |
Помогаю со студенческими работами здесь
Fatal:syntax error,»UNTIL» expected but «indentifier RESET» found program lab6; Ошибка: «sintax error, «OF» expected, but «[» found» Syntax error, «:» expected but «(» found Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 8 |
Ситуация: программист взял в работу математический проект — ему нужно написать код, который будет считать функции и выводить результаты. В задании написано:
«Пусть у нас есть функция f(x,y) = xy, которая перемножает два аргумента и возвращает полученное значение».
Программист садится и пишет код:
a = 10
b = 15
result = 0
def fun(x,y):
return x y
result = fun(a,b)
print(result)
Но при выполнении такого кода компьютер выдаёт ошибку:
File "main.py", line 13
result = x y
^
❌ SyntaxError: invalid syntax
Почему так происходит: в каждом языке программирования есть свой синтаксис — правила написания и оформления команд. В Python тоже есть свой синтаксис, по которому для умножения нельзя просто поставить рядом две переменных, как в математике. Интерпретатор находит первую переменную и думает, что ему сейчас объяснят, что с ней делать. Но вместо этого он сразу находит вторую переменную. Интерпретатор не знает, как именно нужно их обработать, потому что у него нет правила «Если две переменные стоят рядом, их нужно перемножить». Поэтому интерпретатор останавливается и говорит, что у него лапки.
Что делать с ошибкой SyntaxError: invalid syntax
В нашем случае достаточно поставить звёздочку (знак умножения в Python) между переменными — это оператор умножения, который Python знает:
a = 10
b = 15
result = 0
def fun(x,y):
return x * y
result = fun(a,b)
print(result)
В общем случае найти источник ошибки SyntaxError: invalid syntax можно так:
- Проверьте, не идут ли у вас две команды на одной строке друг за другом.
- Найдите в справочнике описание команды, которую вы хотите выполнить. Возможно, где-то опечатка.
- Проверьте, не пропущена ли команда на месте ошибки.
Практика
Попробуйте найти ошибки в этих фрагментах кода:
x = 10 y = 15
def fun(x,y):
return x * y
try:
a = 100
b = "PythonRu"
assert a = b
except AssertionError:
print("Исключение AssertionError.")
else:
print("Успех, нет ошибок!")
Вёрстка:
Кирилл Климентьев
SyntaxError
— это ошибка, которая легко может ввести в ступор начинающего программиста. Стоит забыть одну запятую или не там поставить кавычку и Python наотрез откажется запускать программу. Что ещё хуже, по выводу в консоль сложно сообразить в чём дело. Выглядят сообщения страшно и непонятно. Что с этим делать — не ясно. Вот неполный список того, что можно встретить:
SyntaxError: invalid syntax
SyntaxError: EOL while scanning string literal
SyntaxError: unexpected EOF while parsing
Эта статья о том, как справиться с синтаксической ошибкой SyntaxError
. Дочитайте её до конца и получите безотказный простой алгоритм действий, что поможет вам в трудную минуту — ваш спасательный круг.
Работать будем с программой, которая выводит на экран список учеников. Её код выглядит немного громоздко и, возможно, непривычно. Если не всё написанное вам понятно, то не отчаивайтесь, чтению статьи это не помешает.
students = [
['Егор', 'Кузьмин'],
['Денис', 'Давыдов'],
]
for first_name, last_name in students:
label = 'Имя ученика: {first_name} {last_name}'.format(
first_name = first_name
last_name = last_name
)
print(label)
Ожидается примерно такой результат в консоли:
$ python script.py
Имя ученика: Егор Кузьмин
Имя ученика: Денис Давыдов
Но запуск программы приводит к совсем другому результату. Скрипт сломан:
$ python script.py
File "script.py", line 9
last_name = last_name
^
SyntaxError: invalid syntax
Ошибки в программе бывают разные и каждой нужен свой особый подход. Первым делом внимательно посмотрите на вывод программы в консоль. На последней строчке написано SyntaxError: invalid syntax
. Если эти слова вам не знакомы, то обратитесь за переводом к Яндекс.Переводчику:
SyntaxError: недопустимый синтаксис
SyntaxError: неверный синтаксис
Первое слово SyntaxError
Яндекс не понял. Помогите ему и разделите слова пробелом:
Syntax Error: invalid syntax
Синтаксическая ошибка: неверный синтаксис
Теория. Синтаксические ошибки
Программирование — это не магия, а Python — не волшебный шар. Он не умеет предсказывать будущее, у него нет доступа к секретным знаниями, это просто автомат, это программа. Узнайте как она работает, как ищет ошибки в коде, и тогда легко найдете эффективный способ отладки. Вся необходимая теория собрана в этом разделе, дочитайте до конца.
SyntaxError
— это синтаксическая ошибка. Она случается очень рано, еще до того, как Python запустит программу. Вот что делает компьютер, когда вы запускаете скрипт командой python script.py
:
- запускает программу
python
python
считывает текст из файлаscript.py
python
превращает текст программы в инструкцииpython
исполняет инструкции
Синтаксическая ошибка SyntaxError
возникает на четвёртом этапе в момент, когда Python разбирает текст программы на понятные ему компоненты. Сложные выражения в коде он разбирает на простейшие инструкции. Вот пример кода и инструкции для него:
person = {'name': 'Евгений'}
Инструкции:
- создать строку
'Евгений'
- создать словарь
- в словарь добавить ключ
'name'
со значением'Евгений'
- присвоить результат переменной
person
SyntaxError
случается когда Python не смог разбить сложный код на простые инструкции. Зная это, вы можете вручную разбить код на инструкции, чтобы затем проверить каждую из них по отдельности. Ошибка прячется в одной из инструкций.
1. Найдите поломанное выражение
Этот шаг сэкономит вам кучу сил. Найдите в программе сломанный участок кода. Его вам предстоит разобрать на отдельные инструкции. Посмотрите на вывод программы в консоль:
$ python script.py
File "script.py", line 9
last_name = last_name
^
SyntaxError: invalid syntax
Вторая строчка сообщает: File "script.py", line 9
— ошибка в файле script.py
на девятой строчке. Но эта строка является частью более сложного выражения, посмотрите на него целиком:
label = 'Имя ученика: {first_name} {last_name}'.format(
first_name = first_name
last_name = last_name
)
2. Разбейте выражение на инструкции
В прошлых шагах вы узнали что сломан этот фрагмент кода:
label = 'Имя ученика: {first_name} {last_name}'.format(
first_name = first_name
last_name = last_name
)
Разберите его на инструкции:
- создать строку
'Имя ученика: {first_name} {last_name}'
- получить у строки метод
format
- вызвать функцию с двумя аргументами
- результат присвоить переменной
label
Так выделил бы инструкции программист, но вот Python сделать так не смог и сломался. Пора выяснить на какой инструкции нашла коса на камень.
Теперь ваша задача переписать код так, чтобы в каждой строке программы исполнялось не более одной инструкции из списка выше. Так вы сможете тестировать их по отдельности и облегчите себе задачу. Так выглядит отделение инструкции по созданию строки:
# 1. создать строку
template = 'Имя ученика: {first_name} {last_name}'
label = template.format(
first_name = first_name
last_name = last_name
)
Сразу запустите код, проверьте что ошибка осталась на прежнему месте. Приступайте ко второй инструкции:
# 1. создать строку
template = 'Имя ученика: {first_name} {last_name}'
# 2. получить у строки метод
format = template.format
label = format(
first_name = first_name
last_name = last_name
)
Строка format = template.format
создает новую переменную format
и кладёт в неё функцию. Да, да, это не ошибка! Python разрешает класть в переменные всё что угодно, в том числе и функции. Новая переменная переменная format
теперь работает как обычная функция, и её можно вызвать: format(...)
.
Снова запустите код. Ошибка появится внутри format
. Под сомнением остались две инструкции:
- вызвать функцию с двумя аргументами
- результат присвоить переменной
label
Скорее всего, Python не распознал вызов функции. Проверьте это, избавьтесь от последней инструкции — от создания переменной label
:
# 1. создать строку
template = 'Имя ученика: {first_name} {last_name}'
# 2. получить у строки метод
format = template.format
# 3. вызвать функцию
format(
first_name = first_name
last_name = last_name
)
Запустите код. Ошибка снова там же — внутри format
. Выходит, код вызова функции написан с ошибкой, Python не смог его превратить в инструкцию.
3. Проверьте синтаксис вызова функции
Теперь вы знаете что проблема в коде, вызывающем функцию. Можно помедитировать еще немного над кодом программы, пройтись по нему зорким взглядом еще разок в надежде на лучшее. А можно поискать в сети примеры кода для сравнения.
Запросите у Яндекса статьи по фразе “Python синтаксис функции”, а в них поищите код, похожий на вызов format
и сравните. Вот одна из первых статей в поисковой выдаче:
- Функции в Python
Уверен, теперь вы нашли ошибку. Победа!
На основании Вашего запроса эти примеры могут содержать грубую лексику.
На основании Вашего запроса эти примеры могут содержать разговорную лексику.
синтаксическую ошибку
синтаксической ошибкой
синтаксической ошибки
синтаксических ошибок
Syntax error
ошибка синтаксиса
синтаксической ошибке
You need to find out exactly where the syntax error is.
Computer languages have really strict rules, and a syntax error means you’ve broken one of them.
Компьютерные языки имеют действительно строгие правила, и синтаксическая ошибка означает, что вы нарушили одно из них.
Our job is arguably just as difficult, but we have no compiler to tell us when we’ve made a syntax error.
Можно сказать, что наша работа так же сложна, но у нас нет компилятора, который бы сказал нам, что мы «совершили синтаксическую ошибку».
400 Bad Request There was a syntax error in the client request.
The slightly shorter name C+ is a syntax error; it has also been used as the name of an unrelated language.
Чуть более короткое имя Си+ является синтаксической ошибкой, кроме того, оно уже было использовано как имя совсем другого языка.
When Google encounters a syntax error parsing Structured Data on a page, it will also be reported in aggregate to make sure you don’t miss anything critical.
Когда Google сталкивается с синтаксической ошибкой синтаксического анализа структурированных данных на странице, она также будет сообщаться в совокупности, чтобы убедиться, что вы не пропустите ничего критического.
A syntax error may also occur when an invalid equation is entered into a calculator.
Синтаксическая ошибка может возникать при некорректном вводе уравнения в калькулятор.
501 — A syntax error was encountered in command arguments.
It won’t be explicitly labeled as a syntax error, but that’s exactly what it is.
In computer science, a syntax error is an error in the syntax of a sequence of characters or tokens that is intended to be written in a particular programming language.
В информатике, синтаксическая ошибка относится к ошибке в синтаксисе последовательности символов или токенов, которая записана на определенном языке программирования.
If it is the very first operator, then it is a syntax error.
If this box is checked then MDaemon will send a 501 error code (syntax error in parameters or arguments) and close the connection if the result of a reverse pointer record lookup fails to match.
Если отмечен этот флажок, то, в случае, если обратный поиск записи указателя завершился неудачей, MDaemon пошлёт код ошибки 501 (синтаксическая ошибка в параметрах или аргументах) и закроет соединение.
TypeConverter syntax error encountered while processing initialization string ». Element attributes are not allowed on objects created via TypeConverter.
При обработке строки инициализации обнаружена синтаксическая ошибка TypeConverter. Использование атрибутов свойств не допускается в объектах, созданных посредством TypeConverter.
In fact, it had to be earlier in the program — you won’t get an error message that indicates a syntax error prior to the line on which the error actually occurred.
На самом деле, она должна быть в программе раньше — вы не будете получать сообщение об ошибке, которое указывает на синтаксическую ошибку до строки, на которой ошибка на самом деле произошла.
JavaScript: If there’s a syntax error in your JavaScript, it will prevent the thread with the error from running.
JavaScript: Если в вашем JavaScript есть синтаксическая ошибка, это предотвратит запуск потока с ошибкой.
that will be a syntax error.
will fail with an obscure syntax error.
Syntax error in AppID/CLSID guids badly formatted.
Результатов: 52. Точных совпадений: 52. Затраченное время: 44 мс
Documents
Корпоративные решения
Спряжение
Синонимы
Корректор
Справка и о нас
Индекс слова: 1-300, 301-600, 601-900
Индекс выражения: 1-400, 401-800, 801-1200
Индекс фразы: 1-400, 401-800, 801-1200
Программирование, Python, Учебный процесс в IT, Блог компании SkillFactory
Рекомендация: подборка платных и бесплатных курсов PR-менеджеров — https://katalog-kursov.ru/
Выяснить, что означают сообщения об ошибках Python, может быть довольно сложно, когда вы впервые изучаете язык. Вот список распространенных ошибок, которые приводят к сообщениям об ошибках во время выполнения, которые могут привести к сбою вашей программы.
1) Пропуск “:” после оператора if
, elif
, else
, for
, while
, class
или def
. (Сообщение об ошибке: “SyntaxError: invalid syntax
”)
Пример кода с ошибкой:
if spam == 42
print('Hello!')
2) Использование =
вместо ==
. (Сообщение об ошибке: “SyntaxError: invalid syntax
”)
= является оператором присваивания, а == является оператором сравнения «равно». Пример кода с ошибкой:
if spam = 42:
print('Hello!')
3) Использование неправильного количества отступов. (Сообщение об ошибке: «IndentationError: unexpected indent
» и «IndentationError: unindent does not match any outer indentation level
» и «IndentationError: expected an indented block
»)
Помните, что отступ увеличивается только после оператора, оканчивающегося на “:
” двоеточие, и впоследствии должен вернуться к предыдущему отступу.
Пример кода с ошибкой:
print('Hello!')
print('Howdy!')
… еще:
if spam == 42:
print('Hello!')
print('Howdy!')
… еще:
if spam == 42:
print('Hello!')
4) Забыть вызвать len()
в операторе цикла for
. (Сообщение об ошибке: “TypeError: 'list' object cannot be interpreted as an integer
”)
Обычно вы хотите перебирать индексы элементов в списке или строке, что требует вызова функции range()
. Просто не забудьте передать возвращаемое значение len(someList)
вместо передачи только someList
.
Пример кода с ошикой:
spam = ['cat', 'dog', 'mouse']
for i in range(spam):
print(spam[i])
(UPD: как некоторые указали, вам может понадобиться только for i in spam:
вместо приведенного выше кода. Но вышесказанное относится к очень законному случаю, когда вам нужен индекс в теле цикла, а не только само значение.)
5) Попытка изменить строковое значение. (Сообщение об ошибке: “TypeError: 'str' object does not support item assignment
”)
Строки являются неизменным типом данных. Пример кода с ошибкой:
spam = 'I have a pet cat.'
spam[13] = 'r'
print(spam)
Пример правильного варианта:
spam = 'I have a pet cat.'
spam = spam[:13] + 'r' + spam[14:]
print(spam)
6) Попытка объединить не строковое значение в строковое значение. (Сообщение об ошибке: “TypeError: Can't convert 'int' object to str implicitly”
)
Пример кода с ошибкой:
numEggs = 12
print('I have ' + numEggs + ' eggs.')
Правильный вариант:
numEggs = 12
print('I have ' + str(numEggs) + ' eggs.')
… или:
numEggs = 12
print('I have %s eggs.' % (numEggs))
7) Пропуск кавычки, в начале или конце строкового значения. (Сообщение об ошибке: “SyntaxError: EOL while scanning string literal”
)
Пример кода с ошикой:
print(Hello!')
… еще:
print('Hello!)
...еще:
myName = 'Al'
print('My name is ' + myName + . How are you?')
Опечатка в переменной или имени функции. (Сообщение об ошибке:
“NameError: name 'fooba' is not defined”
)
Пример кода с ошибкой:
foobar = 'Al'
print('My name is ' + fooba)
...еще:
spam = ruond(4.2)
...еще:
spam = Round(4.2)
9) Опечатка в названии метода. (Сообщение об ошибке: “AttributeError: 'str' object has no attribute 'lowerr'”
)
Пример кода с ошибкой:
spam = 'THIS IS IN LOWERCASE.'
spam = spam.lowerr()
10) Выход за пределы массива. (Сообщение об ошибке: “IndexError: list index out of range”
)
Пример кода с ошибкой:
spam = ['cat', 'dog', 'mouse']
print(spam[6])
11) Использование несуществующего ключа словаря. (Сообщение об ошибке: “KeyError: 'spam'”
)
Пример кода с ошибкой:
spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'}
print('The name of my pet zebra is ' + spam['zebra'])
12) Попытка использовать ключевые слова Python в качестве переменной (Сообщение об ошибке: “SyntaxError: invalid syntax”
)
Ключевые слова Python (также называются зарезервированные слова) не могут быть использованы для названия переменных. Ошибка будет со следующим кодом:
class = 'algebra'
Ключевые слова Python 3: and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield
13) Использование расширенного оператора присваивания для новой переменной. (Сообщение об ошибке: “NameError: name 'foobar' is not defined”
)
Не думайте, что переменные начинаются со значения, такого как 0
или пустая строка. Выражение с расширенным оператором как spam += 1
эквивалентно spam = spam + 1
. Это означает, что для начала в spam
должно быть какое-то значение.
Пример кода с ошибкой:
spam = 0
spam += 42
eggs += 42
14) Использование локальных переменных (с таким же именем как и у глобальной переменной) в функции до назначения локальной переменной. (Сообщение об ошибке: “UnboundLocalError: local variable 'foobar' referenced before assignment”
)
Использовать локальную переменную в функции, имя которой совпадает с именем глобальной переменной, довольно сложно. Правило таково: если переменной в функции когда-либо назначается что-то, она всегда является локальной переменной, когда используется внутри этой функции. В противном случае, это глобальная переменная внутри этой функции.
Это означает, что вы не можете использовать ее как глобальную переменную в функции до ее назначения.
Пример кода с ошибкой:
someVar = 42
def myFunction():
print(someVar)
someVar = 100
myFunction()
15) Попытка использовать range()
для создания списка целых чисел. (Сообщение об ошибке: “TypeError: 'range' object does not support item assignment”
)
Иногда вам нужен список целочисленных значений по порядку, поэтому range()
кажется хорошим способом создать этот список. Однако вы должны помнить, что range()
возвращает «объект диапазона», а не фактическое значение списка.
Пример кода с ошибкой:
spam = range(10)
spam[4] = -1
То что вы хотите сделать, выглядит так:
spam = list(range(10))
spam[4] = -1
(UPD: Это работает в Python 2, потому что Python 2’s range()
возвращает список значений. Но, попробовав сделать это в Python 3, вы увидите ошибку.)
16) Нет оператора ++
инкремента или --
декремента. (Сообщение об ошибке: “SyntaxError: invalid syntax”
)
Если вы пришли из другого языка программирования, такого как C++, Java или PHP, вы можете попытаться увеличить или уменьшить переменную с помощью ++
или --
. В Python таких операторов нет.
Пример кода с ошибкой:
spam = 0
spam++
То что вы хотите сделать, выглядит так:
spam = 0
spam += 1
17) UPD: как указывает Luchano в комментариях, также часто забывают добавить self
в качестве первого параметра для метода. (Сообщение об ошибке: «TypeError: TypeError: myMethod() takes no arguments (1 given)»
)
Пример кода с ошибкой:
class Foo():
def myMethod():
print('Hello!')
a = Foo()
a.myMethod()
Краткое объяснение различных сообщений об ошибках приведено в Приложении D книги «Invent with Python».
Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя онлайн-курсы SkillFactory:
- Курс «Профессия Data Scientist» (24 месяца)
- Курс «Профессия Data Analyst» (18 месяцев)
- Курс «Python для веб-разработки» (9 месяцев)
Читать еще
- 450 бесплатных курсов от Лиги Плюща
- Бесплатные курсы по Data Science от Harvard University
- 30 лайфхаков чтобы пройти онлайн-курс до конца
- Самый успешный и самый скандальный Data Science проект: Cambridge Analytica
Содержание:
- Улучшения в сообщении об ошибке
SyntaxErrors
;- Новые сообщения для исключений
SyntaxError
;
- Новые сообщения для исключений
- Улучшения в сообщении
IndentationErrors
; - Улучшения в сообщении
AttributeErrors
; - Улучшения в сообщении
NameErrors
.
Улучшения в сообщении исключения SyntaxErrors
.
При синтаксическом анализе кода, который содержит незакрытые скобки, с версии Python 3.10, вместо отображения сообщения SyntaxError: unexpected EOF
и указание на какое-то неправильное место, интерпретатор включает местоположение незакрытых скобок. Например, рассмотрим следующий код (обратите внимание на незакрытый '{'
):
expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, 38: 4, 39: 4, 45: 5, 46: 5, 47: 5, 48: 5, 49: 5, 54: 6, some_other_code = foo()
Предыдущие версии интерпретатора сообщали о запутанных местах в качестве места синтаксической ошибки:
File "example.py", line 3 some_other_code = foo() ^ SyntaxError: invalid syntax
но в Python 3.10 выдается более информативная ошибка:
File "example.py", line 1 expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, ^ SyntaxError: '{' was never closed
Точно так же ошибки, связанные с незакрытыми строковыми литералами (одинарными и тройными кавычками), теперь указывают на начало строки вместо сообщения EOF/EOL
.
Эти улучшения вдохновлены предыдущей работой в интерпретаторе PyPy.
Исключения SyntaxError
, вызванные интерпретатором, теперь будут выделять полный диапазон ошибок выражения, составляющего саму синтаксическую ошибку, а не только то место, где обнаружена проблема. Таким образом, вместо отображения (до Python 3.10):
>>> foo(x, z for z in range(10), t, w) # File "<stdin>", line 1 # foo(x, z for z in range(10), t, w) # ^ # SyntaxError: Generator expression must be parenthesized
теперь Python 3.10 отобразит исключение как:
>>> foo(x, z for z in range(10), t, w) # File "<stdin>", line 1 # foo(x, z for z in range(10), t, w) # ^^^^^^^^^^^^^^^^^^^^ # SyntaxError: Generator expression must be parenthesized
Новые сообщения для исключений SyntaxError
.
Для исключений SyntaxError
добавлено значительное количество новых специализированных сообщений. Вот некоторые из наиболее примечательных:
Отсутствие двоеточия :
перед блоком:
>>> if rocket.position > event_horizon # File "<stdin>", line 1 # if rocket.position > event_horizon # ^ # SyntaxError: expected ':'
Кортеж без скобок в выражении-генератора:
>>> {x,y for x,y in zip('abcd', '1234')} # File "<stdin>", line 1 # {x,y for x,y in zip('abcd', '1234')} # ^ # SyntaxError: did you forget parentheses around the comprehension target?
Отсутствуют запятые в литералах коллекции и между выражениями:
>>> items = { ... x: 1, ... y: 2 ... z: 3, # File "<stdin>", line 3 # y: 2 # ^ # SyntaxError: invalid syntax. Perhaps you forgot a comma?
Несколько типов исключений без скобок:
>>> try: ... build_dyson_sphere() ... except NotEnoughScienceError, NotEnoughResourcesError: # File "<stdin>", line 3 # except NotEnoughScienceError, NotEnoughResourcesError: # ^ # SyntaxError: multiple exception types must be parenthesized
Отсутствует двоеточие :
и/или значение ключа в словарях:
>>> values = { ... x: 1, ... y: 2, ... z: ... } # File "<stdin>", line 4 # z: # ^ # SyntaxError: expression expected after dictionary key and ':' >>> values = {x:1, y:2, z w:3} # File "<stdin>", line 1 # values = {x:1, y:2, z w:3} # ^ # SyntaxError: ':' expected after dictionary key
Блок try
без except
или finally
:
>>> try: ... x = 2 ... something = 3 # File "<stdin>", line 3 # something = 3 # ^^^^^^^^^ # SyntaxError: expected 'except' or 'finally' block
Использование =
вместо ==
при сравнении:
>>> if rocket.position = event_horizon: # File "<stdin>", line 1 # if rocket.position = event_horizon: # ^ # SyntaxError: cannot assign to attribute here. # Maybe you meant '==' instead of '='?
Использование *
в f-строках:
>>> f"Black holes {*all_black_holes} and revelations" # File "<stdin>", line 1 # (*all_black_holes) # ^ # SyntaxError: f-string: cannot use starred expression here
Улучшения в сообщении об ошибке IndentationErrors
.
Многие исключения IndentationError
теперь имеют больше контекста относительно того, какой блок ожидает отступ, включая расположение оператора:
>>> def foo(): ... if lel: ... x = 2 # File "<stdin>", line 3 # x = 2 # ^ # IndentationError: expected an indented block after 'if' statement in line 2
Улучшения в сообщении об ошибке AttributeErrors
.
При печати исключения AttributeError
, функция интерпретатора PyErr_Display()
предложит варианты похожих имен атрибутов в объекте, из которого возникло исключение:
>>> collections.namedtoplo # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # AttributeError: module 'collections' has no attribute 'namedtoplo'. # Did you mean: namedtuple?
Предупреждение. Обратите внимание, что это не сработает, если для отображения ошибки не вызывается `PyErr_Display(). Это может произойти при использовании какой-либо другой пользовательской функции отображения ошибок. Например, это распространенный сценарий в IPython.
Улучшения в сообщении об ошибке NameErrors
.
При печати исключения NameError
, функция интерпретатора PyErr_Display()
предложит варианты похожих имен переменных в функции, из которой было вызвано исключение:
>>> schwarzschild_black_hole = None >>> schwarschild_black_hole # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # NameError: name 'schwarschild_black_hole' is not defined. Did you mean: schwarzschild_black_hole?
Предупреждение. Обратите внимание, что это не сработает, если для отображения ошибки не вызывается `PyErr_Display(). Это может произойти при использовании какой-либо другой пользовательской функции отображения ошибок. Например, это распространенный сценарий в IPython.
Обработка ошибок увеличивает отказоустойчивость кода, защищая его от потенциальных сбоев, которые могут привести к преждевременному завершению работы.
Прежде чем переходить к обсуждению того, почему обработка исключений так важна, и рассматривать встроенные в Python исключения, важно понять, что есть тонкая грань между понятиями ошибки и исключения.
Ошибку нельзя обработать, а исключения Python обрабатываются при выполнении программы. Ошибка может быть синтаксической, но существует и много видов исключений, которые возникают при выполнении и не останавливают программу сразу же. Ошибка может указывать на критические проблемы, которые приложение и не должно перехватывать, а исключения — состояния, которые стоит попробовать перехватить. Ошибки — вид непроверяемых и невозвратимых ошибок, таких как OutOfMemoryError
, которые не стоит пытаться обработать.
Обработка исключений делает код более отказоустойчивым и помогает предотвращать потенциальные проблемы, которые могут привести к преждевременной остановке выполнения. Представьте код, который готов к развертыванию, но все равно прекращает работу из-за исключения. Клиент такой не примет, поэтому стоит заранее обработать конкретные исключения, чтобы избежать неразберихи.
Ошибки могут быть разных видов:
- Синтаксические
- Недостаточно памяти
- Ошибки рекурсии
- Исключения
Разберем их по очереди.
Синтаксические ошибки (SyntaxError)
Синтаксические ошибки часто называют ошибками разбора. Они возникают, когда интерпретатор обнаруживает синтаксическую проблему в коде.
Рассмотрим на примере.
a = 8
b = 10
c = a b
File "", line 3
c = a b
^
SyntaxError: invalid syntax
Стрелка вверху указывает на место, где интерпретатор получил ошибку при попытке исполнения. Знак перед стрелкой указывает на причину проблемы. Для устранения таких фундаментальных ошибок Python будет делать большую часть работы за программиста, выводя название файла и номер строки, где была обнаружена ошибка.
Недостаточно памяти (OutofMemoryError)
Ошибки памяти чаще всего связаны с оперативной памятью компьютера и относятся к структуре данных под названием “Куча” (heap
). Если есть крупные объекты (или) ссылки на подобные, то с большой долей вероятности возникнет ошибка OutofMemory
. Она может появиться по нескольким причинам:
- Использование 32-битной архитектуры Python (максимальный объем выделенной памяти невысокий, между 2 и 4 ГБ);
- Загрузка файла большого размера;
- Запуск модели машинного обучения/глубокого обучения и много другое;
Обработать ошибку памяти можно с помощью обработки исключений — резервного исключения. Оно используется, когда у интерпретатора заканчивается память и он должен немедленно остановить текущее исполнение. В редких случаях Python вызывает OutofMemoryError
, позволяя скрипту каким-то образом перехватить самого себя, остановить ошибку памяти и восстановиться.
Но поскольку Python использует архитектуру управления памятью из языка C (функция malloc()
), не факт, что все процессы восстановятся — в некоторых случаях MemoryError
приведет к остановке. Следовательно, обрабатывать такие ошибки не рекомендуется, и это не считается хорошей практикой.
Ошибка рекурсии (RecursionError)
Эта ошибка связана со стеком и происходит при вызове функций. Как и предполагает название, ошибка рекурсии возникает, когда внутри друг друга исполняется много методов (один из которых — с бесконечной рекурсией), но это ограничено размером стека.
Все локальные переменные и методы размещаются в стеке. Для каждого вызова метода создается стековый кадр (фрейм), внутрь которого помещаются данные переменной или результат вызова метода. Когда исполнение метода завершается, его элемент удаляется.
Чтобы воспроизвести эту ошибку, определим функцию recursion
, которая будет рекурсивной — вызывать сама себя в бесконечном цикле. В результате появится ошибка StackOverflow
или ошибка рекурсии, потому что стековый кадр будет заполняться данными метода из каждого вызова, но они не будут освобождаться.
def recursion():
return recursion()
recursion()
---------------------------------------------------------------------------
RecursionError Traceback (most recent call last)
in
----> 1 recursion()
in recursion()
1 def recursion():
----> 2 return recursion()
... last 1 frames repeated, from the frame below ...
in recursion()
1 def recursion():
----> 2 return recursion()
RecursionError: maximum recursion depth exceeded
Ошибка отступа (IndentationError)
Эта ошибка похожа по духу на синтаксическую и является ее подвидом. Тем не менее она возникает только в случае проблем с отступами.
Пример:
for i in range(10):
print('Привет Мир!')
File "", line 2
print('Привет Мир!')
^
IndentationError: expected an indented block
Исключения
Даже если синтаксис в инструкции или само выражение верны, они все равно могут вызывать ошибки при исполнении. Исключения Python — это ошибки, обнаруживаемые при исполнении, но не являющиеся критическими. Скоро вы узнаете, как справляться с ними в программах Python. Объект исключения создается при вызове исключения Python. Если скрипт не обрабатывает исключение явно, программа будет остановлена принудительно.
Программы обычно не обрабатывают исключения, что приводит к подобным сообщениям об ошибке:
Ошибка типа (TypeError)
a = 2
b = 'PythonRu'
a + b
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in
1 a = 2
2 b = 'PythonRu'
----> 3 a + b
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Ошибка деления на ноль (ZeroDivisionError)
10 / 0
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
in
----> 1 10 / 0
ZeroDivisionError: division by zero
Есть разные типы исключений в Python и их тип выводится в сообщении: вверху примеры TypeError
и ZeroDivisionError
. Обе строки в сообщениях об ошибке представляют собой имена встроенных исключений Python.
Оставшаяся часть строки с ошибкой предлагает подробности о причине ошибки на основе ее типа.
Теперь рассмотрим встроенные исключения Python.
Встроенные исключения
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StopAsyncIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError
+-- AssertionError
+-- AttributeError
+-- BufferError
+-- EOFError
+-- ImportError
| +-- ModuleNotFoundError
+-- 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
| +-- RecursionError
+-- SyntaxError
| +-- IndentationError
| +-- TabError
+-- SystemError
+-- TypeError
+-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
+-- ResourceWarning
Прежде чем переходить к разбору встроенных исключений быстро вспомним 4 основных компонента обработки исключения, как показано на этой схеме.
Try
: он запускает блок кода, в котором ожидается ошибка.Except
: здесь определяется тип исключения, который ожидается в блокеtry
(встроенный или созданный).Else
: если исключений нет, тогда исполняется этот блок (его можно воспринимать как средство для запуска кода в том случае, если ожидается, что часть кода приведет к исключению).Finally
: вне зависимости от того, будет ли исключение или нет, этот блок кода исполняется всегда.
В следующем разделе руководства больше узнаете об общих типах исключений и научитесь обрабатывать их с помощью инструмента обработки исключения.
Ошибка прерывания с клавиатуры (KeyboardInterrupt)
Исключение KeyboardInterrupt
вызывается при попытке остановить программу с помощью сочетания Ctrl + C
или Ctrl + Z
в командной строке или ядре в Jupyter Notebook. Иногда это происходит неумышленно и подобная обработка поможет избежать подобных ситуаций.
В примере ниже если запустить ячейку и прервать ядро, программа вызовет исключение KeyboardInterrupt
. Теперь обработаем исключение KeyboardInterrupt
.
try:
inp = input()
print('Нажмите Ctrl+C и прервите Kernel:')
except KeyboardInterrupt:
print('Исключение KeyboardInterrupt')
else:
print('Исключений не произошло')
Исключение KeyboardInterrupt
Стандартные ошибки (StandardError)
Рассмотрим некоторые базовые ошибки в программировании.
Арифметические ошибки (ArithmeticError)
- Ошибка деления на ноль (Zero Division);
- Ошибка переполнения (OverFlow);
- Ошибка плавающей точки (Floating Point);
Все перечисленные выше исключения относятся к классу Arithmetic
и вызываются при ошибках в арифметических операциях.
Деление на ноль (ZeroDivisionError)
Когда делитель (второй аргумент операции деления) или знаменатель равны нулю, тогда результатом будет ошибка деления на ноль.
try:
a = 100 / 0
print(a)
except ZeroDivisionError:
print("Исключение ZeroDivisionError." )
else:
print("Успех, нет ошибок!")
Исключение ZeroDivisionError.
Переполнение (OverflowError)
Ошибка переполнение вызывается, когда результат операции выходил за пределы диапазона. Она характерна для целых чисел вне диапазона.
try:
import math
print(math.exp(1000))
except OverflowError:
print("Исключение OverFlow.")
else:
print("Успех, нет ошибок!")
Исключение OverFlow.
Ошибка утверждения (AssertionError)
Когда инструкция утверждения не верна, вызывается ошибка утверждения.
Рассмотрим пример. Предположим, есть две переменные: a
и b
. Их нужно сравнить. Чтобы проверить, равны ли они, необходимо использовать ключевое слово assert
, что приведет к вызову исключения Assertion
в том случае, если выражение будет ложным.
try:
a = 100
b = "PythonRu"
assert a == b
except AssertionError:
print("Исключение AssertionError.")
else:
print("Успех, нет ошибок!")
Исключение AssertionError.
Ошибка атрибута (AttributeError)
При попытке сослаться на несуществующий атрибут программа вернет ошибку атрибута. В следующем примере можно увидеть, что у объекта класса Attributes
нет атрибута с именем attribute
.
class Attributes(obj):
a = 2
print(a)
try:
obj = Attributes()
print(obj.attribute)
except AttributeError:
print("Исключение AttributeError.")
2
Исключение AttributeError.
Ошибка импорта (ModuleNotFoundError)
Ошибка импорта вызывается при попытке импортировать несуществующий (или неспособный загрузиться) модуль в стандартном пути или даже при допущенной ошибке в имени.
import nibabel
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
in
----> 1 import nibabel
ModuleNotFoundError: No module named 'nibabel'
Ошибка поиска (LookupError)
LockupError
выступает базовым классом для исключений, которые происходят, когда key
или index
используются для связывания или последовательность списка/словаря неверна или не существует.
Здесь есть два вида исключений:
- Ошибка индекса (
IndexError
); - Ошибка ключа (
KeyError
);
Ошибка ключа
Если ключа, к которому нужно получить доступ, не оказывается в словаре, вызывается исключение KeyError
.
try:
a = {1:'a', 2:'b', 3:'c'}
print(a[4])
except LookupError:
print("Исключение KeyError.")
else:
print("Успех, нет ошибок!")
Исключение KeyError.
Ошибка индекса
Если пытаться получить доступ к индексу (последовательности) списка, которого не существует в этом списке или находится вне его диапазона, будет вызвана ошибка индекса (IndexError: list index out of range python).
try:
a = ['a', 'b', 'c']
print(a[4])
except LookupError:
print("Исключение IndexError, индекс списка вне диапазона.")
else:
print("Успех, нет ошибок!")
Исключение IndexError, индекс списка вне диапазона.
Ошибка памяти (MemoryError)
Как уже упоминалось, ошибка памяти вызывается, когда операции не хватает памяти для выполнения.
Ошибка имени (NameError)
Ошибка имени возникает, когда локальное или глобальное имя не находится.
В следующем примере переменная ans
не определена. Результатом будет ошибка NameError
.
try:
print(ans)
except NameError:
print("NameError: переменная 'ans' не определена")
else:
print("Успех, нет ошибок!")
NameError: переменная 'ans' не определена
Ошибка выполнения (Runtime Error)
Ошибка «NotImplementedError»
Ошибка выполнения служит базовым классом для ошибки NotImplemented
. Абстрактные методы определенного пользователем класса вызывают это исключение, когда производные методы перезаписывают оригинальный.
class BaseClass(object):
"""Опередляем класс"""
def __init__(self):
super(BaseClass, self).__init__()
def do_something(self):
# функция ничего не делает
raise NotImplementedError(self.__class__.__name__ + '.do_something')
class SubClass(BaseClass):
"""Реализует функцию"""
def do_something(self):
# действительно что-то делает
print(self.__class__.__name__ + ' что-то делает!')
SubClass().do_something()
BaseClass().do_something()
SubClass что-то делает!
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
in
14
15 SubClass().do_something()
---> 16 BaseClass().do_something()
in do_something(self)
5 def do_something(self):
6 # функция ничего не делает
----> 7 raise NotImplementedError(self.__class__.__name__ + '.do_something')
8
9 class SubClass(BaseClass):
NotImplementedError: BaseClass.do_something
Ошибка типа (TypeError)
Ошибка типа вызывается при попытке объединить два несовместимых операнда или объекта.
В примере ниже целое число пытаются добавить к строке, что приводит к ошибке типа.
try:
a = 5
b = "PythonRu"
c = a + b
except TypeError:
print('Исключение TypeError')
else:
print('Успех, нет ошибок!')
Исключение TypeError
Ошибка значения (ValueError)
Ошибка значения вызывается, когда встроенная операция или функция получают аргумент с корректным типом, но недопустимым значением.
В этом примере встроенная операция float
получат аргумент, представляющий собой последовательность символов (значение), что является недопустимым значением для типа: число с плавающей точкой.
try:
print(float('PythonRu'))
except ValueError:
print('ValueError: не удалось преобразовать строку в float: 'PythonRu'')
else:
print('Успех, нет ошибок!')
ValueError: не удалось преобразовать строку в float: 'PythonRu'
Пользовательские исключения в Python
В Python есть много встроенных исключений для использования в программе. Но иногда нужно создавать собственные со своими сообщениями для конкретных целей.
Это можно сделать, создав новый класс, который будет наследовать из класса Exception
в Python.
class UnAcceptedValueError(Exception):
def __init__(self, data):
self.data = data
def __str__(self):
return repr(self.data)
Total_Marks = int(input("Введите общее количество баллов: "))
try:
Num_of_Sections = int(input("Введите количество разделов: "))
if(Num_of_Sections < 1):
raise UnAcceptedValueError("Количество секций не может быть меньше 1")
except UnAcceptedValueError as e:
print("Полученная ошибка:", e.data)
Введите общее количество баллов: 10
Введите количество разделов: 0
Полученная ошибка: Количество секций не может быть меньше 1
В предыдущем примере если ввести что-либо меньше 1, будет вызвано исключение. Многие стандартные исключения имеют собственные исключения, которые вызываются при возникновении проблем в работе их функций.
Недостатки обработки исключений в Python
У использования исключений есть свои побочные эффекты, как, например, то, что программы с блоками try-except работают медленнее, а количество кода возрастает.
Дальше пример, где модуль Python timeit
используется для проверки времени исполнения 2 разных инструкций. В stmt1
для обработки ZeroDivisionError
используется try-except, а в stmt2
— if
. Затем они выполняются 10000 раз с переменной a=0
. Суть в том, чтобы показать разницу во времени исполнения инструкций. Так, stmt1
с обработкой исключений занимает больше времени чем stmt2
, который просто проверяет значение и не делает ничего, если условие не выполнено.
Поэтому стоит ограничить использование обработки исключений в Python и применять его в редких случаях. Например, когда вы не уверены, что будет вводом: целое или число с плавающей точкой, или не уверены, существует ли файл, который нужно открыть.
import timeit
setup="a=0"
stmt1 = '''
try:
b=10/a
except ZeroDivisionError:
pass'''
stmt2 = '''
if a!=0:
b=10/a'''
print("time=",timeit.timeit(stmt1,setup,number=10000))
print("time=",timeit.timeit(stmt2,setup,number=10000))
time= 0.003897680000136461
time= 0.0002797570000439009
Выводы!
Как вы могли увидеть, обработка исключений помогает прервать типичный поток программы с помощью специального механизма, который делает код более отказоустойчивым.
Обработка исключений — один из основных факторов, который делает код готовым к развертыванию. Это простая концепция, построенная всего на 4 блоках: try
выискивает исключения, а except
их обрабатывает.
Очень важно поупражняться в их использовании, чтобы сделать свой код более отказоустойчивым.