ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 03.12.2023
Просмотров: 372
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
32
Глава 1.Обработка ошибок и обращение за помощью он находит лишь по одной ошибке за раз. Статический анализ способен выявить сразу несколько ошибок, и это происходит прямо в редакторе — вы видите строки с ошибками.
Рис. 1.2. Статический анализатор указывает на не определенную переменную в Mu (наверху), PyCharm (в середине) и Sublime Text (внизу)
Возможно, ваш редактор или IDE не поддерживает статического анализа, но если в нем поддерживаются плагины, статический анализатор почти всегда можно под- ключить. Обычно такие плагины используют для проведения статического анализа модуль Pylakes или какой-то другой.
Чтобы установить Pylakes, откройте страницу https://pypi.org/project/pylakes/ или выполните команду pip install
--user pyflakes
. Поверьте, дело того стоит.
ПРИМЕЧАНИЕ
В системе Windows можно выполнять команды python и pip. Но в macOS и Linux эти имена подходят только для Python версии 2, и вместо них следует использовать команды python3 и pip3. Помните об этом, когда вы встречаете python или pip в книге.
В IDLE (среда, включенная в поставку Python) нет ни статического анализатора, ни возможности его установки.
Как обратиться за помощью по программированию
33
Как обратиться за помощью
по программированию
Если поиск в интернете и статические анализаторы не помогли с решением вашей проблемы, стоит обратиться за помощью к сообществу в интернете. Но существует определенный этикет при обращениях за советом. Если опытные разработчики готовы бесплатно ответить на ваш вопрос, позаботьтесь о том, чтобы эффективно использовать их время.
Обращение за помощью к незнакомым людям всегда должно быть последней мерой.
Могут пройти часы и дни, пока кто-нибудь ответит на ваш вопрос — если вы во- обще получите ответ. Гораздо быстрее поискать в интернете других людей, которые уже ответили на ваш вопрос, и прочитать их ответы. Электронная документация и поисковые системы создавались как раз для того, чтобы облегчить поиск ответов, за которыми в противном случае пришлось бы обращаться к людям. Но если все иные возможности исчерпаны и вам все-таки приходится обращаться с вопросом к людям, старайтесь избегать некоторых распространенных ошибок.
Не спрашивайте, можно ли задать вопрос, а просто задайте его.
Не обозначайте суть вопроса намеками, формулируйте конкретно.
Не задавайте вопрос на неподходящем форуме или веб-сайте.
Не используйте неконкретный заголовок или тему сообщения — например,
«У меня проблема» или «Помогите, пожалуйста».
Не пишите «Моя программа не работает», объясните, как она должна ра ботать.
Не храните в секрете полные сообщения об ошибках.
Не ленитесь опубликовать ваш код.
Не приводите плохо отформатированный код.
Не замалчивайте, что вы уже пытались сделать.
Не скрывайте информацию об операционной системе или версии.
Не просите написать программу за вас.
Этот список приведен не просто для красоты; неправильная коммуникация мешает людям помочь вам. Первое, о чем следует просить, — запустить код и попытаться воспроизвести вашу проблему. Для этого тому, кто решит вам помочь, понадобится как можно больше информации о вашем коде, компьютере и намерениях. Гораздо чаще информации оказывается слишком мало, а не слишком много. В нескольких следующих разделах я расскажу, что можно сделать для предотвращения распро- страненных ошибок. Мои рекомендации относятся к случаю, когда вы публикуете свои вопросы на интернет-форуме, однако они актуальны и тогда, когда вы отправ- ляете вопросы адресно одному или нескольким людям.
34
Глава 1.Обработка ошибок и обращение за помощью
1 2 3 4 5 6 7 8 9 ... 40
Избегайте лишних разговоров, предоставляйте информацию заранее
Если вы обращаетесь к кому-то лично, фраза «Можно ли задать вам вопрос?» станет коротким и любезным способом узнать, доступен ли адресат. Но на интернет-фору- мах эксперт может ответить не сразу, а тогда, когда у него появится время. Так как переписка иногда растягивается на часы, лучше предоставить всю информацию, которая может понадобиться, в исходном сообщении, а не спрашивать каждый раз разрешения задать вопрос. Если вам не ответили, стоит скопировать эту информацию на другой форум.
Формулируйте свой вопрос как вопрос
Когда вы объясняете свою проблему, иногда возникает иллюзия, что эксперты уже знают, о чем идет речь. Но программирование — весьма обширная область; может оказаться, что у них нет опыта конкретно в той области, которая интересует вас. По- этому так важно сформулировать ваш вопрос в форме вопроса. Хотя предложения, начинающиеся со слов «Мне хотелось бы…» или «Мой код не работает…», могут намекать на суть, обязательно задайте конкретный вопрос — то есть буквально предложение, завершающееся вопросительным знаком. В противном случае может быть непонятно, о чем вы спрашиваете.
Задавайте вопросы на подходящем веб-сайте
Если вы начнете спрашивать о Python на форуме JavaScript или об алгоритмах — в списке рассылки, посвященном сетевой безопасности, вряд ли это принесет пользу. В большинстве случаев в списках рассылки и интернет-форумах имеется перечень часто задаваемых вопросов (FAQ) или описание обсуждаемых тем. На- пример, список рассылки python-dev посвящен проектированию языка Python и не является общим списком рассылки для получения помощи. Веб-страница
https://www.python.org/about/help/ поможет вам найти подходящий ресурс для запроса о языке Python.
Включите краткое описание вопроса в заголовок
Одно из главных преимуществ публикации вопроса на интернет-форуме заклю- чается в том, что тот, у кого тот же вопрос возникнет позже, сможет найти ответ при помощи поиска в интернете. Обязательно включите заголовок с кратким описанием вопроса, чтобы упростить работу поисковых систем. Заголовок типа
«Помогите, пожалуйста» или «Почему мой код не работает?» слишком неопре- деленный. Если вы просите совета по электронной почте, информация в стро- ке — это то, на что эксперт обратит внимание, когда будет просматривать папку входящих сообщений.
Как обратиться за помощью по программированию
35
Объясните, что должен делать ваш код
В вопросе «Почему моя программа не работает?» отсутствует важнейшая инфор- мация: что должна делать ваша программа. А тот, кто прочитает вопрос, не знает ваших намерений. Даже в формулировке «Почему я получаю эту ошибку?» по- лезно указать конечную цель вашей программы. В некоторых случаях вам могут ответить, что вы выбрали не тот путь и вам проще начать все заново, вместо того чтобы тратить время на попытки что-то исправить.
STACK OVERFLOW И ПОСТРОЕНИЕ АРХИВА ОТВЕТОВ
Stack Overflow — популярный веб-сайт для получения ответов на вопросы по программированию, но многие новички опасаются пользоваться им. Извест- но, что модераторы Stack Overflow безжалостно закрывают вопросы, которые не соответствуют их строгим рекомендациям. Тем не менее существует веская причина для поддержания столь жесткой дисциплины на Stack Overflow.
Сайт создавался не столько для получения ответов на вопросы, сколько для построения архива вопросов по программированию вместе с ответами на них. Как следствие, вопросы должны быть конкретными, уникальными и не основанными на субъективных мнениях. Кроме того, они должны быть по- дробными и хорошо сформулированными, чтобы пользователям поисковых систем было проще найти их. (Ситуация для программистов до появления
Stack Overflow легла в основу юмористического комикса XKCD «Wisdom of the Ancients» по адресу https://xkcd.com/979/.) Тридцать ответов на один и тот же вопрос не только неэффективно расходуют усилия добровольных экс- пертов с сайта, но сбивают с толку пользователей поисковых систем множе- ственными результатами. Вопросы должны иметь конкретные, объективные ответы. Ответ на вопрос «Какой самый лучший язык программирования?» является делом вкуса, он только порождает лишние споры. (Ведь мы уже знаем, что лучший язык программирования — Python.)
Тем не менее неприятно, когда ваш вопрос игнорируют, не ответив. Я реко- мендую внимательно прочитать советы этой главы и руководство «How do I ask a good question?» на сайте Stack Overflow по адресу https://stackoverflow.
com/help/how-to-ask/. Поэтому не стесняйтесь использовать псевдоним, если боитесь задать «глупый» вопрос. Stack Overflow не требует указывать настоящие имена для своих учетных записей. Если вы предпочитаете более непринужденную обстановку, возможно, вам стоит обратиться на страницу https://reddit.com/r/learnpython/ — это сообщество не так строго относится к вопросам. Тем не менее обязательно прочитайте рекомендации, прежде чем писать на сайт.
36
Глава 1.Обработка ошибок и обращение за помощью
Включите полное сообщение об ошибке
Не забудьте скопировать все сообщение об ошибке, включая трассировку. Простое описание вроде «Получаю ошибку выхода за границы диапазона» не содержит до- статочной информации, чтобы эксперт смог понять, что же пошло не так. Также укажите, всегда ли вы получаете ошибку или проблема возникает эпизодически.
Если вы выявили конкретные обстоятельства, в которых происходит ошибка, стоит и их включить в описание.
Приведите полный код
Наряду с полным сообщением об ошибке и трассировкой предоставьте исходный код всей программы. В этом случае эксперт, у которого вы просите помощь, смо- жет запустить программу на своей машине в отладчике и посмотреть, что в ней происходит. Всегда приводите минимальный, полный и воспроизводимый (MCR —
Minimum, Complete, Reproducible) пример, надежно воспроизводящий полученную ошибку. Термин MCR возник при обсуждениях на сайте Stack Overflow, подробнее о нем — на странице https://stackoverflow.com/help/mcve/. «Минимальный» означает, что ваш код должен быть по возможности коротким, но при этом воспроизводить возникшую проблему. «Полный» — что пример кода содержит все необходимое для воспроизведения ошибки. «Воспроизводимый» означает, что ваш пример кода надежно воспроизводит описанную проблему.
Но если вся ваша программа содержится в одном файле, отправить ее помощнику будет несложно. Только проследите за тем, чтобы она была правильно отформати- рована — об этом в следующем разделе.
Правильно отформатируйте свой код
Вы публикуете свой код, чтобы эксперт мог прочитать вашу программу и воспро- извести ошибку. Но помните, что код должен быть правильно отформатирован.
Убедитесь, что ваш адресат сможет легко скопировать код и запустить его в том виде, в котором вы его публикуете. Если вы копируете свой код в сообщение электронной почты, учтите, что многие почтовые клиенты удаляют отступы, и ваш код будет выглядеть так:
def knuts(self, value):
if not isinstance(value, int) or value < 0:
raise WizCoinException('knuts attr must be a positive int')
self._knuts = value
Мало того что эксперту придется потратить время на вставку отступов в каждой строке программы; трудно с ходу сказать, каким отступом должна начинаться каж- дая строка. Чтобы обеспечить правильное форматирование кода, скопируйте его
Как обратиться за помощью по программированию
37
на веб-сайт pastebin (например, https://pastebin.com/ или https://gist.github.com/), который сохраняет ваш код с коротким общедоступным URL-адресом (например,
https://pastebin.com/XeU3yusC). Передать URL намного проще, чем использовать вложенный файл.
Если вы публикуете свой код на веб-сайте (например, https://stackoverflow.com/ или
https://reddit.com/r/learnpython/), обязательно используйте средства форматирования в его текстовых полях. Часто при создании отступа из четырех пробелов в строке ис- пользуется моноширинный программный шрифт, который проще читать. Также стоит заключить текст в символы
`
(обратный апостроф), чтобы оформить код программ- ным шрифтом. Такие сайты часто включают ссылку на информацию форматирования.
Если вы не будете соблюдать эти рекомендации, это может привести к нарушению форматирования исходного кода, отчего он будет выводиться в одной строке:
def knuts(self, value):if not isinstance(value, int) or value < 0:raise
WizCoinException('knuts attr must be a positive int') self._knuts = value
Также не передавайте свой код на снимках экрана; не пытайтесь сфотографировать экран и отправить изображение. Скопировать код из графического изображения невозможно, к тому же обычно он плохо читается.
Сообщите, что вы уже пытались сделать
Сообщите в вопросе, что вы уже пытались сделать и что у вас получилось в резуль- тате. Эта информация избавит эксперта от напрасных попыток пройти по ложному следу, а заодно покажет, что вы прилагали усилия, чтобы решить свою проблему.
Кроме того, так вы продемонстрируете, что обращаетесь за помощью, а не просите других написать программу за вас. К сожалению, нередко студенты просят незна- комых людей в интернете сделать за них домашнюю работу, или предприниматели уговаривают кого-то бесплатно написать «простое приложение». Форумы про- граммистов создаются не для этого.
Опишите свою рабочую конфигурацию
Конфигурация вашего компьютера может повлиять на то, как работает ваша про- грамма и какие ошибки она выдает. Чтобы эксперт мог воспроизвести вашу про- блему на своем компьютере, предоставьте следующую информацию.
Операционная система и ее версия (например, Windows 10 Professional
Edition или macOS Catalina).
Версия Python, использованная для запуска программы (например, Python 3.7 или Python 3.6.6).