>'__builtins__': }
>>>> animal
>'fruitbat'
Локальное пространство имен внутри функции change_local() содержало только локальную переменную animal. Глобальное пространство имен содержало отдельную глобальную переменную animal и многое другое.
Использование _ и __ в именах. Имена, которые начинаются с двух нижних подчеркиваний (__), зарезервированы для использования внутри Python, поэтому вам не следует применять их для своих переменных. Этот шаблон именования был выбран потому, что разработчики, скорее всего, не будут использовать его для создания имен своих переменных.
Например, имя функции находится в системной переменной функция.__name__, а имя ее строки документации — функция.__doc__:
>>>> def amazing():
>…·····'''This is the amazing function.
>…·····Want to see it again?'''
>…·····print('This function is named:', amazing.__name__)
>…·····print('And its docstring is:', amazing.__doc__)
>…
>>>> amazing()
>This function is named: amazing
>And its docstring is: This is the amazing function.
>····Want to see it again?
Как вы видели ранее в содержимом globals, основной программе присвоено специальное имя __main__.
Обработка ошибок с помощью try и except
Делай или не делай. Не надо пытаться.
Йода
В некоторых языках программирования ошибки отображаются с помощью специальных возвращаемых значений. В Python используются исключения: код, который выполняется, когда происходит связанная с ним ошибка.
Нечто похожее вы уже видели, когда попытались получить доступ к не входящей в список/кортеж позиции или ключу, которого не существует в словаре. Когда вы выполняете код, который при некоторых обстоятельствах может не сработать, вам также понадобятся обработчики исключений, чтобы перехватить любые потенциальные ошибки.
Хорошим тоном является использование обработчиков исключений везде, где может быть сгенерировано исключение, чтобы пользователь знал, что происходит. Вы можете быть неспособны исправить ошибку, но по крайней мере можете узнать, при каких обстоятельствах это произошло, и аккуратно завершить программу. Если исключение сгенерировалось в функции и не было обработано, оно всплывает до тех пор, пока не будет поймано соответствующим обработчиком в одной из вызывающих функций. Если вы не предоставите собственный обработчик исключения, Python выведет сообщение об ошибке и некоторую информацию о том, где произошла ошибка, а затем завершит программу, как показано в следующем фрагменте кода.
>>>> short_list = [1, 2, 3]
>>>> position = 5
>>>> short_list[position]
>Traceback (most recent call last):