Errors & testing · Ошибки и тестирование
Three kinds of error
- A syntax error breaks the rules of Python, so the code will not run.
- A runtime error crashes the program while it is running.
- A logic error runs fine but gives the wrong answer.
Три вида ошибок
- Синтаксическая ошибка нарушает правила Python, поэтому код не запустится.
- Ошибка времени выполнения приводит к крашу программы во время её работы.
- Логическая ошибка выполняется без сбоев, но выдает неправильный результат.
Syntax errors
- These are typos: a missing
:, an unclosed quote, a wrong indent. - Python refuses to start and shows you the line.
- Fix the spelling or punctuation, then run again.
Синтаксические ошибки
- Это опечатки: пропущенный
:, незакрытая кавычка, неправильный отступ. - Python отказывается запускаться и показывает строку с ошибкой.
- Исправьте орфографию или пунктуацию, затем запустите снова.
Runtime errors
- The code starts, then hits something it cannot do.
- Examples:
10 / 0, orint("hello"), or reading past the end of a list. - The program stops at that line with a message.
Ошибки времени выполнения
- Код запускается, но натыкается на действие, которое не может выполнить.
- Примеры: деление на
10 / 0, обращение к несуществующему индексуint("hello"), чтение за пределами списка. - Программа останавливается на этой строке с сообщением об ошибке.
Logic errors
- The program runs to the end but the result is wrong.
- Example: using
-where you meant+, or stopping a loop too early. - These are the hardest to find — the computer did exactly what you wrote.
Логические ошибки
- Программа выполняется до конца, но результат неверен.
- Пример: использование
-вместо того, что задумывалось как+, или преждевременный выход из цикла. - Их сложнее всего найти — компьютер сделал ровно то, что вы написали.
Read the traceback
- When a program crashes, Python prints a traceback.
- Read the last line first: it names the error and what went wrong.
- The line number tells you where to look.
Чтение стека вызовов (traceback)
- Когда программа падает, Python печатает стек вызовов (traceback).
- Читайте последнюю строку первой: она указывает тип ошибки и причину сбоя.
- Номер строки говорит, где искать проблему.
Traceback (most recent call last):
File "<program>", line 2, in <module>
print(10 / 0)
ZeroDivisionError: division by zero
Test with chosen data
- Do not trust code until you have tested it.
- Use normal data, boundary data (like
0), and extreme data. - Check each answer against what you worked out by hand.
Тестирование на выбранных данных
- Не доверяйте коду, пока не протестируете его.
- Используйте нормальные данные, граничные данные (например,
0) и экстремальные данные. - Проверяйте каждый ответ по тому, что вы посчитали вручную.
def square(n):
return n * n
print(square(3)) # normal -> 9
print(square(0)) # boundary -> 0
print(square(-2)) # negative -> 4
Common mistakes
- A syntax error stops the program before it runs, so fix those first.
- Catch a specific error with
except ValueError:, not a bareexcept:. - Test the tricky cases (empty, zero, the biggest), not just the easy one.
Распространенные ошибки
- Синтаксическая ошибка останавливает программу до запуска, поэтому исправляйте их в первую очередь.
- Перехватывайте конкретную ошибку с помощью
except ValueError:, а не «голого»except:. - Тестируйте сложные случаи (пустые, нуль, максимальное значение), а не только простые.
Now you try
- Each task has a logic error to fix, or a crash to prevent.
- Press Check answer to test your fix against several cases.
Теперь попробуйте сами
- В каждой задаче есть логическая ошибка, которую нужно исправить, или краш, который следует предотвратить.
- Нажмите Check answer, чтобы проверить ваше исправление на нескольких случаях.
Find and fix a bug · Найдите и исправьте ошибку
Testing is a cycle: run it, see what's wrong, fix, run again. · Тестирование — это цикл: запустите программу, определите проблему, исправьте, запустите снова.
This function should add a and b, but it has a logic error — it subtracts. Fix it so it returns the sum. · Эта функция должна складывать значения a и b, но содержит логическую ошибку — она вычитает. Исправьте её, чтобы она возвращала сумму.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
sum_to(n) should return 1 + 2 + ... + n, but it stops one number too early (an off-by-one logic error). Fix the range so it includes n. · sum_to(n) должна возвращать 1 + 2 + ... + n, но она останавливается на одно число слишком рано (ошибка логики off-by-one). Исправьте range, чтобы она включала n.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
Write safe_divide(a, b) that returns a / b, but prevents a runtime crash: if b is 0, return 0 instead. · Напишите safe_divide(a, b), которая возвращает a / b, но предотвращает сбой во время выполнения: если b равно 0, верните вместо этого 0.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
average(nums) has two bugs: it divides by the wrong number, and it crashes on an empty list. Fix both, so average([2, 4, 6]) is 4 and average([]) is 0. · В average(nums) есть два ошибки: она делит не на то число, и вызывает сбой при пустом списке. Исправьте обе, чтобы average([2, 4, 6]) было равно 4, а average([]) — 0.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.