Module (67%)
Section (8%)

Ошибки, сбои и другие бедствия

Все, что может пойти не так, пойдет не так.

Это закон Мерфи, и он работает везде и всегда. Выполнение Вашего кода тоже может пойти не так. Если это может произойти, это произойдет.

Посмотрите на код в редакторе. Есть по крайней мере два возможных пути, которыми он может пойти не так. Видите их?

  • поскольку пользователь может вводить совершенно произвольную строку символов, нет гарантии, что строку можно преобразовать в значение с плавающей точкой - это первая уязвимость кода;
  • вторая - функция sqrt() завершается ошибкой, если получает отрицательный аргумент.
 

Вы можете получить одно из следующих сообщений об ошибке.

Что-то вроде этого:

Enter x: Abracadabra Traceback (most recent call last): File "sqrt.py", line 3, in <module> x = float(input("Enter x: ")) ValueError: could not convert string to float: 'Abracadabra'

output


Или что-то вроде этого:

Enter x: -1 Traceback (most recent call last): File "sqrt.py", line 4, in <module> y = math.sqrt(x) ValueError: math domain error

output


Можно ли защитить себя от таких неожиданностей? Конечно можно. Более того, Вы должны сделать это, чтобы считаться хорошим программистом.



Code

import math

x = float(input("Enter x: "))
y = math.sqrt(x)

print("The square root of", x, "equals to", y)
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×