Перейти к содержимому

Typo in word python что это

  • автор:

Spellchecking

PyCharm checks the spelling of all your source code, including variable names, text in strings, comments, literals, and commit messages. For this purpose, PyCharm provides a dedicated Typo inspection which is enabled by default.

The Typo inspection detects and highlights words that are not included in any dictionary. You can either correct the spelling or save the word to the dictionary.

Disable the Typo inspection if you want to ignore all spelling mistakes. For more information, refer to Disable spellchecking.

Correct a misspelled word

  1. Place the caret at any word highlighted by the Typo inspection.
  2. Click or press Alt+Enter to show the available intention actions.
  3. Select one of the suggested fixes from the list.

In string literals and comments, only the spelling of this particular word at caret changes. For code elements, such as names of variables, functions, classes, and other symbols, the inspection also suggests changing all occurrences via the Rename refactoring.

Save a word to dictionary

If a detected typo is actually a valid word, you can add it to a user-defined dictionary that extends the built-in dictionaries.

  1. Place the caret at a word highlighted by the Typo inspection.
  2. Click or press Alt+Enter to show the available intention actions.
  3. Select the Save to dictionary action to add the word to the user’s dictionary and skip it in the future. If you have added the word by mistake, press Control+Z to remove it from the dictionary.

By default, PyCharm saves words to the global application-level dictionary. You can choose to save words to the project-level dictionary if the spelling is correct only for this particular project. For more information, refer to Select the default dictionary for saving words.

Press F2 and Shift+F2 to step through all problems in a file, including typos.

Find all spelling mistakes

The Typo inspection highlights typos in the current file. You can also run the inspection on your entire project or a set of files. For more information, refer to Run a single inspection.

  1. In the main menu, go to Code | Analyze Code | Run Inspection by Name… or press Control+Alt+Shift+I .
  2. In the Enter inspection name popup, find and select the Typo inspection.
  3. In the Run ‘Typo’ dialog, select the scope in which you want to run the inspection, and other options, such as a file mask filter. Then click OK .

PyCharm will run the Typo inspection on all files in the selected scope and show all found typos in a separate tab of the Problems tool window.

Configure the Typo inspection

By default, the Typo inspection checks all text, including code elements, string literals, and comments in all scopes.

  1. Press Control+Alt+S to open the IDE settings and then select Editor | Inspections .
  2. Expand the Proofreading node and click Typo in the central pane.
  3. In the right-hand pane, configure the Typo inspection: Severity Specify the severity level and the scope in which to apply this level. For example, if you want typos to stand out more, select Error or Warning to highlight typos similar to syntax errors or warnings in your code. Options Specify the type of content to check:
    • Process code : check various code elements.
    • Process literals : check text inside string literals.
    • Process comments : check text inside comments.

Suppress the Typo inspection

Like with any other inspection, you can suppress the Typo inspection for specific files and code elements.

How to suppress the Typo inspection

  1. Place the caret at a word highlighted by the Typo inspection.
  2. Click or press Alt+Enter to show the available intention actions.
  3. On one of the suggested fixes, press the right arrow key or click and select Suppress for class or another relevant suppress action.

Depending on the language and code element, this adds a special annotation or comment that tells the editor to suppress the relevant inspection in the corresponding scope. For example, in case of Python, suppressing the Typo inspection for a class adds the following annotation before the class declaration:

# noinspection SpellCheckingInspection

This suppresses all spelling checks within the class.

For more information, refer to Suppress inspections.

Disable spellchecking

  1. Press Control+Alt+S to open the IDE settings and then select Editor | Inspections .
  2. Clear the checkbox next to the Typo inspection.

Dictionaries

PyCharm includes bundled dictionaries for all configured languages. You cannot change them directly, but you can extend the spellchecker in other ways:

  • Save words to a built-in global or project dictionary.
  • Add plain-text files with the .dic extension that contain lists of words.
  • You can add Hunspell dictionaries, each of which consists of two files: the DIC file that contains a list of words with the applicable modification rules and the AFF file that lists prefixes and suffixes regulated by a specific modification rule. For example, en_GB.dic and en_GB.aff .

Configure the spellchecker dictionaries

  1. Press Control+Alt+S to open the IDE settings and then select Editor | Natural Languages | Spelling .
  2. Configure the list of custom dictionaries:
    • To add a new custom dictionary to the list, click or press Alt+Insert and specify the location of the required file.
    • To edit the contents of a custom dictionary in PyCharm, select it and click or press Enter . The corresponding file will open in a new editor tab.
    • To remove a custom dictionary from the list, select it and click or press Alt+Delete .

Select the default dictionary for saving words

By default, PyCharm saves words to the global application-level dictionary. You can choose to save words to the project-level dictionary if the spelling is correct only for this particular project.

  1. Press Control+Alt+S to open the IDE settings and then select Editor | Natural Languages | Spelling .
  2. Select either the built-in project-level or application-level dictionary or disable the option to prompt you every time you save a word.

Add accepted words manually

  1. Press Control+Alt+S to open the IDE settings and then select Editor | Natural Languages | Spelling .
  2. Add words to the Accepted words list. PyCharm adds manually accepted words to the project-level dictionary. You can’t add words that are already present in one of the dictionaries and mixed-case words, such as CamelCase and snake_case .

The Accepted words list also contains words that you saved to either the built-in global or project dictionary. Although it does not contain words added to the project-level dictionary by other users and words from other custom dictionaries, the Typo inspection will not highlight them.

Share dictionaries

PyCharm stores the built-in project-level dictionary with other project-related files. This means that anyone working with the project has access to the words stored in this dictionary.

To share your application-level dictionary, use the bundled Settings Sync plugin.

Исправление орфографии в Python с помощью TextBlob

Орфографические ошибки являются обычным явлением, и большинство людей привыкло к программному обеспечению, указывающему, была ли ошибка допущена. От автокоррекции на наших телефонах до красного подчеркивания в текстовых редакторах — проверка орфографии является важной функцией для многих различных продуктов.

Первая программа, реализующая проверку орфографии, была написана в 1971 году для DEC PDP-10. Названный SPELL, он был способен выполнять только простые сравнения слов и обнаруживать различия в одной или двух буквах. По мере развития аппаратного и программного обеспечения появляются и средства проверки орфографии. Современные средства проверки правописания способны обрабатывать морфологию и использовать статистику для улучшения предложений.

Python предлагает множество модулей для этих целей, что делает написание простой проверки орфографии легким 20-минутным испытанием.

Одной из этих библиотек является TextBlob, которая используется для обработки естественного языка и предоставляет интуитивно понятный API для работы.

В этой статье мы рассмотрим, как реализовать исправление орфографии в Python с помощью TextBlob.

Установка

Во-первых, нам нужно установить TextBlob, поскольку он не предустановлен. Откройте консоль и установите его с помощью pip:

pip install textblob

Это должно установить все, что нам нужно для этого проекта. По окончании установки вывод консоли должен включать что-то вроде:

Successfully installed click-7.1.2 joblib-0.17.0 nltk-3.5 regex-2020.11.13 textblob-0.15.3 

TextBlob построен на основе NLTK, поэтому он также поставляется с установкой.

Функция correct()

Самый простой способ исправить вводимый текст — использовать метод correct() . В качестве примера мы будем использовать абзац из книги Чарльза Дарвина «О происхождении видов», которая является частью общественного достояния и упакована в файл с именем text.txt .

Кроме того, мы добавим несколько умышленных орфографических ошибок:

As far as I am abl to judg, after long attnding to the sbject, the condiions of lfe apear to act in two ways—directly on the whle organsaton or on certin parts alne and indirectly by afcting the reproducte sstem. Wit respct to te dirct action, we mst bea in mid tht in every cse, as Profesor Weismann hs latly insistd, and as I have inidently shwn in my wrk on "Variatin undr Domesticcation," thcere arae two factrs: namly, the natre of the orgnism and the natture of the condiions. The frmer sems to be much th mre importannt; foor nealy siimilar variations sometimes aris under, as far as we cn juddge, disimilar conditios; annd, on te oter hannd, disssimilar variatioons arise undder conditions which aappear to be nnearly uniiform. The efffects on tthe offspring arre ieither definnite or in definite. They maay be considdered as definnite whhen allc or neearly all thhe ofefspring off inadividuals exnposed tco ceertain conditionas duriing seveal ggenerations aree moodified in te saame maner. 

Это полный орфографических ошибок текст, почти в каждом слове. Давайте напишем простой скрипт, используя TextBlob, чтобы исправить эти ошибки и распечатать их обратно в консоль:

from textblob import TextBlob with open("text.txt", "r") as f: # Opening the test file with the intention to read text = f.read() # Reading the file textBlb = TextBlob(text) # Making our first textblob textCorrected = textBlb.correct() # Correcting the text print(textCorrected) 

Если вы раньше работали с TextBlob, этот алгоритм будет вам знаком. Мы прочитали файл и его содержимое и создали экземпляр TextBlob , передав содержимое конструктору.

Затем мы запускаем функцию correct() в этом экземпляре для исправления орфографии.

После запуска приведенного выше сценария вы должны получить примерно такой результат:

Is far as I am all to judge, after long attending to the subject, the conditions of life appear to act in two ways—directly on the while organisation or on certain parts alone and indirectly by acting the reproduce system. It respect to te direct action, we must be in mid the in every case, as Professor Weismann he lately insisted, and as I have evidently shown in my work on "Variation under Domesticcation," there are two facts: namely, the nature of the organism and the nature of the conditions. The former seems to be much th are important; for nearly similar variations sometimes arms under, as far as we in judge, similar condition; and, on te other hand, disssimilar variations arise under conditions which appear to be nearly uniform. The effects on the offspring are either definite or in definite. They may be considered as definite when all or nearly all the offspring off individuals exposed to certain conditions during several generations are modified in te same manner. 

Насколько верна коррекция орфографии TextBlob?

Как видим, в тексте все еще есть орфографические ошибки. Слова вроде «abl» должны были быть «able» , а не «all» . Хотя даже с ними все равно лучше оригинала.

Теперь возникает вопрос, насколько это лучше?

Следующий фрагмент кода представляет собой простой сценарий, который проверяет, насколько хорошо TextBlob исправляет ошибки, на основе этого примера:

from textblob import TextBlob # A function that compares two texts and returns # the number of matches and differences def compare(text1, text2): l1 = text1.split() l2 = text2.split() good = 0 bad = 0 for i in range(0, len(l1)): if l1[i] != l2[i]: bad += 1 else: good += 1 return (good, bad) # Helper function to calculate the percentage of misspelled words def percentageOfBad(x): return (x[1] / (x[0] + x[1])) * 100 

Теперь, используя эти две функции, давайте проведем быстрый анализ:

with open("test.txt", "r") as f1: # test.txt contains the same typo-filled text from the last example t1 = f1.read() with open("original.txt", "r") as f2: # original.txt contains the text from the actual book t2 = f2.read() t3 = TextBlob(t1).correct() mistakesCompOriginal = compare(t1, t2) originalCompCorrected = compare(t2, t3) mistakesCompCorrected = compare(t1, t3) print("Mistakes compared to original ", mistakesCompOriginal) print("Original compared to corrected ", originalCompCorrected) print("Mistakes compared to corrected ", mistakesCompCorrected, "\n") print("Percentage of mistakes in the test: ", percentageOfBad(mistakesCompOriginal), "%") print("Percentage of mistakes in the corrected: ", percentageOfBad(originalCompCorrected), "%") print("Percentage of fixed mistakes: ", percentageOfBad(mistakesCompCorrected), "%", "\n") 

Запустив его, вы распечатаете:

Mistakes compared to original (126, 194) Original compared to corrected (269, 51) Mistakes compared to corrected (145, 175) Percentage of mistakes in the test: 60.62499999999999 % Percentage of mistakes in the corrected: 15.937499999999998 % Percentage of fixed mistakes: 54.6875 % 

Как мы видим, методу correct удалось уменьшить процент орфографических ошибок с 60,6% до 15,9%, что довольно неплохо, однако есть небольшая загвоздка. Он исправил 54,7% слов, так почему все еще остается 15,9% ошибок?

Ответ — чрезмерное исправление. Иногда он может изменить слово, которое написано правильно, например, первое слово в нашем примере текста, где «As» было исправлено «Is» . В других случаях ему просто не хватает информации о слове и контексте, чтобы сказать, какое слово пользователь намеревался ввести, поэтому он догадывается, что его следует заменить «whl» на «while» вместо «whole» .

Не существует идеального корректора орфографии, потому что большая часть разговорной речи зависит от контекста, так что имейте это в виду. В большинстве случаев ошибок гораздо меньше, чем в нашем примере, поэтому TextBlob должен работать достаточно хорошо для обычного пользователя.

Обучающий TextBlob с настраиваемыми наборами данных

Что, если вы хотите проверить орфографию на другом языке, который не поддерживается TextBlob из коробки? Или, может быть, вы хотите быть немного точнее? Что ж, может быть способ добиться этого. Все сводится к тому, как работает проверка орфографии в TextBlob.

TextBlob использует статистику использования слов на английском языке, чтобы делать разумные предложения по поводу того, какие слова следует исправить. Он хранит эту статистику в файле с именем en-spelling.txt , но также позволяет вам создать свой собственный файл статистики использования слов.

Попробуем сделать такой для нашего примера Дарвина. Мы будем использовать все слова из «Происхождения видов» для обучения. Вы можете использовать любой текст, просто убедитесь, что в нем достаточно слов, имеющих отношение к тексту, который вы хотите исправить.

В нашем случае остальная часть книги предоставит отличный контекст и дополнительную информацию, которая потребуется TextBlob для более точного исправления.

from textblob.en import Spelling import re textToLower = "" with open("originOfSpecies.txt","r") as f1: # Open our source file text = f1.read() # Read the file textToLower = text.lower() # Lower all the capital letters words = re.findall("[a-z]+", textToLower) # Find all the words and place them into a list oneString = " ".join(words) # Join them into one string pathToFile = "train.txt" # The path we want to store our stats file at spelling = Spelling(path = pathToFile) # Connect the path to the Spelling object spelling.train(oneString, pathToFile) # Train 

Если мы заглянем в файл train.txt , то увидим:

a 3389 abdomen 3 aberrant 9 aberration 5 abhorrent 1 abilities 1 ability 4 abjectly 1 able 54 ably 5 abnormal 17 abnormally 2 abodes 2 . 

Это означает, что слово «a» отображается как слово 3389 раз, а «ably» только 5 раз. Чтобы проверить эту обученную модель, мы будем использовать suggest(text) вместо correct(text) , который представляет собой список кортежей доверия слов. Первым элементом в списке будет слово, в котором он уверен, поэтому мы можем получить к нему доступ через suggest(text)[0][0] .

Обратите внимание, что это может быть медленнее, поэтому проверяйте орфографию слово за словом, так как сброс огромных объемов данных может привести к сбою:

from textblob.en import Spelling from textblob import TextBlob pathToFile = "train.txt" spelling = Spelling(path = pathToFile) text = " " with open("test.txt", "r") as f: text = f.read() words = text.split() corrected = " " for i in words : corrected = corrected +" "+ spelling.suggest(i)[0][0] # Spell checking word by word print(corrected) 

И теперь это приведет к:

As far as I am all to judge after long attending to the subject the conditions of life appear to act in two ways—directly on the whole organisation or on certain parts alone and indirectly by acting the reproduce system It respect to the direct action we most be in mid the in every case as Professor Weismann as lately insisted and as I have incidently shown in my work on "Variatin under Domesticcation," there are two facts namely the nature of the organism and the nature of the conditions The former seems to be much th are important for nearly similar variations sometimes arise under as far as we in judge dissimilar conditions and on the other hand dissimilar variations arise under conditions which appear to be nearly uniform The effects on the offspring are either definite or in definite They may be considered as definite when all or nearly all the offspring off individuals exposed to certain conditions during several generations are modified in the same manner. 

Это исправляет примерно 2 из 3 слов с ошибками, что довольно хорошо, учитывая запуск без особого контекста.

Откуда ошибка Typo: In Word ‘слово’?

Использую редактор PyCharm для Python, периодически слова в комментариях подчёркиваются волнистой линией, иногда такое же случается с названиями функций, которые я задаю. Слова абсолютно безобидные и написаны без ошибок. Например начинаю комментарий со слова если, он его сразу подчёркивает. Вот что ему не нравится ?
Читал, что можно добавить слово в словарь и ошибка пропадёт, либо полностью отключить проверку орфографии, но мне интересна сама первопричина, по которой он подчёркивает безобидные слова.

  • Вопрос задан более трёх лет назад
  • 13614 просмотров

4 комментария

Простой 4 комментария

Отладка для абсолютных начинающих

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

Независимо от обстоятельств код, создаваемый разработчиками программного обеспечения, далеко не всегда работает так, как задумано. В некоторых случаях все идет совершенно не по плану! Когда происходит непредвиденное, следующая задача заключается в том, чтобы выяснить, почему, и хотя мы можем просто заманчиво просто следить за нашим кодом в течение нескольких часов, проще и эффективнее использовать средство отладки или отладчик.

К сожалению, отладчик не является той волшебной палочкой, по мановению которой будут выявлены абсолютно все проблемы в коде. Процесс отладки подразумевает пошаговое выполнение кода в средстве отладки (например, в Visual Studio) в поисках точки, в которой вы допустили ошибку при написании программы. Таким образом вы узнаете, какие исправления нужно внести в код. При этом средства отладки часто позволяют вносить временные изменения, чтобы продолжить работу с программой.

Эффективное использование отладчика также требует определенных навыков, которые вырабатываются только с практикой, однако умение работать с ним является основополагающим требованием к любому разработчику программного обеспечения. В этой статье мы представим основные принципы отладки и некоторые начальные рекомендации.

Проанализируйте проблему, задавая себе правильные вопросы

Это поможет вам выяснить, в чем состоит проблема, прежде чем приступать к ее решению. Мы полагаем, что вы уже сталкивались с проблемами в коде, иначе вряд ли читали бы сейчас эту статью в поисках советов по его отладке! Итак, прежде чем начать отладку, проанализируйте проблему, которую вы пытаетесь решить:

  • Что именно должен был выполнить код?
  • Что произошло на самом деле? Если при запуске приложения возникает ошибка (исключение), это может быть хорошо! Исключение возникает в том случае, если при выполнении кода происходит непредвиденное событие (как правило, это ошибка какого-либо рода). С помощью средства отладки вы можете перейти точно к тому месту в коде, где возникло исключение, и исследовать возможные способы исправления ситуации. Если произошло что-то еще, каковы признаки проблемы? Есть ли у вас предположения относительно того, в каком месте кода возникла проблема? Например, если код должен выводить какой-то текст, но при этом текст содержит ошибки, вы можете сделать вывод, что в этом случае используются неверные данные или код вывода текста содержит ошибки другого рода. При пошаговом выполнении кода в отладчике вы можете изучить каждое изменение переменных и точно определить, когда и каким образом были присвоены неверные значения.

Проверьте свои предположения

Прежде чем исследовать причины возникновения ошибки, проверьте предположения, на основании которых вы ожидаете тот или иной результат. Неявные или неизвестные вам предположения могут помешать выявлению проблемы, даже если вы прямо смотрите на ее причину в отладчике. У вас может быть длинный список возможных предположений! Чтобы проверить их, задайте себе несколько вопросов.

  • Используете ли вы нужный API (то есть соответствующие объект, функцию, метод или свойство)? Возможно, используемый вами API работает не так, как вы ожидаете. (После проверки вызова API в отладчике исправление может потребовать поездки в документацию, чтобы определить правильный API.)
  • Правильно ли вы используете API? Даже если вы выбрали нужный API, он может использоваться неправильно.
  • Нет ли в вашем коде опечаток? Некоторые опечатки, например ошибки в написании имени переменной, могут быть незаметными, особенно при работе с языками, в которых не требуется объявление переменных перед их использованием.
  • Вносили ли вы в код изменения, полагая, что они никак не связаны с возникшей проблемой?
  • Должны ли объект или переменная содержать определенное значение (или определенный тип значения) и соответствует ли это действительности?
  • Известно ли назначение кода? Отлаживать чужой код часто бывает сложнее. Если это не ваш код, возможно, для его эффективной отладки вам потребуется изучить, что он делает.

Совет При написании кода начинайте с небольших и гарантированно работающих фрагментов! (Хороший пример кода полезен здесь.) Иногда проще исправить большой или сложный набор кода, начиная с небольшого фрагмента кода, демонстрирующего основную задачу, которую вы пытаетесь достичь. Затем вы можете последовательно изменять или добавлять код в поисках точки возникновения ошибки.

Подспрошив предположения, вы можете сократить время, необходимое для поиска проблемы в коде. Вы также можете сократить время, необходимое для устранения проблемы.

Используйте режим пошагового выполнения во время отладки для поиска места возникновения проблемы.

Очевидно, что ошибки и неверные результаты можно увидеть только после выполнения кода приложения. Кроме того, работа программы может завершиться неожиданно без каких-либо сообщений.

При запуске приложения в отладчике, который также называется режимом отладки, отладчик активно отслеживает все, что происходит при запуске программы. Кроме того, вы можете в любой точке приостановить работу приложения, исследовать его состояние и пошагово выполнять код в каждой строке, чтобы видеть в деталях, что происходит.

Icon showing Start Debugging button.

В Visual Studio введите режим отладки с помощью F5 (или > команды меню «Запуск отладки» или кнопки «Начать отладку» на панели инструментов отладки). Если возникает исключение, помощник по исправлению ошибок Visual Studio направит вас к точке его появления и предоставит другую необходимую информацию. См. дополнительные сведения об обработке исключений в коде в разделе Приемы и инструменты отладки.

Если исключение не возникает, возможно, вы имеете некоторое представление о том, где искать проблему в коде. Этот шаг заключается в том, что вы используете точки останова с отладчиком, чтобы дать себе возможность тщательно изучить код. Точки останова — это самая основная и важная функция надежной отладки. Точка останова указывает, в каком месте Visual Studio следует приостановить выполнение, чтобы вы могли проверить значения переменных, работу памяти или последовательность выполнения кода.

Чтобы задать точку останова в Visual Studio, достаточно щелкнуть в левом поле рядом с интересующей вас строкой кода. Также для этого можно поместить указатель мыши в нужную строку и нажать клавишу F9.

Чтобы продемонстрировать это, мы рассмотрим пример кода, который уже содержит несколько ошибок. Здесь мы используем C#, однако функции отладки также применяются для Visual Basic, C++, JavaScript, Python и других поддерживаемых языков. Также предоставлен пример кода для Visual Basic, но снимки экрана приведены для C#.

Создание образца приложения с ошибками

Затем вы создадите приложение с несколькими ошибками.

  1. Необходимо установить Visual Studio и рабочую нагрузку разработки для классических приложений .NET. Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого. Если необходимо установить рабочую нагрузку, но у вас уже есть Visual Studio, выберите «Сервис >получения инструментов» и «Компоненты». Запускается Visual Studio Installer. Выберите рабочую нагрузку Разработка классических приложений .NET и нажмите Изменить.
  2. Откройте Visual Studio. На начальном экране выберите Создать проект. Введите консоль в поле поиска, выберите C# или Visual Basic в качестве языка, а затем выберите консольное приложение для .NET. Нажмите кнопку Далее. Введите имя проекта, например ConsoleApp_FirstApp , и нажмите кнопку «Далее«. Выберите рекомендуемую целевую платформу или .NET 8, а затем нажмите кнопку «Создать«. Если вы не видите шаблон проекта консольного приложения для .NET, перейдите в раздел «Сервис >получения инструментов и функций«, который открывает установщик Visual Studio. Выберите рабочую нагрузку Разработка классических приложений .NET и нажмите Изменить. Visual Studio создаст консольный проект и откроет его в Обозревателе решений в области справа.
  3. Откройте файл Program.cs (или Program.vb) и замените все его содержимое по умолчанию следующим кодом. (Сначала выберите вкладку для нужного языка: C# или Visual Basic.)

using System; using System.Collections.Generic; namespace ConsoleApp_FirstApp < class Program < static void Main(string[] args) < Console.WriteLine("Welcome to Galaxy News!"); IterateThroughList(); Console.ReadKey(); >private static void IterateThroughList() < var theGalaxies = new List< new Galaxy() < Name="Tadpole", MegaLightYears=400, GalaxyType=new GType('S')>, new Galaxy() < Name="Pinwheel", MegaLightYears=25, GalaxyType=new GType('S')>, new Galaxy() < Name="Cartwheel", MegaLightYears=500, GalaxyType=new GType('L')>, new Galaxy() < Name="Small Magellanic Cloud", MegaLightYears=.2, GalaxyType=new GType('I')>, new Galaxy() < Name="Andromeda", MegaLightYears=3, GalaxyType=new GType('S')>, new Galaxy() < Name="Maffei 1", MegaLightYears=11, GalaxyType=new GType('E')>>; foreach (Galaxy theGalaxy in theGalaxies) < Console.WriteLine(theGalaxy.Name + " " + theGalaxy.MegaLightYears + ", " + theGalaxy.GalaxyType); >// Expected Output: // Tadpole 400, Spiral // Pinwheel 25, Spiral // Cartwheel, 500, Lenticular // Small Magellanic Cloud .2, Irregular // Andromeda 3, Spiral // Maffei 1, 11, Elliptical > > public class Galaxy < public string Name < get; set; >public double MegaLightYears < get; set; >public object GalaxyType < get; set; >> public class GType < public GType(char type) < switch(type) < case 'S': MyGType = Type.Spiral; break; case 'E': MyGType = Type.Elliptical; break; case 'l': MyGType = Type.Irregular; break; case 'L': MyGType = Type.Lenticular; break; default: break; >> public object MyGType < get; set; >private enum Type < Spiral, Elliptical, Irregular, Lenticular>> > 
Imports System Imports System.Collections.Generic Namespace ConsoleApp_FirstApp Friend Class Program Public Shared Sub Main(ByVal args As String()) Console.WriteLine("Welcome to Galaxy News!") Call IterateThroughList() Console.ReadKey() End Sub Private Shared Sub IterateThroughList() Dim theGalaxies = New List(Of Galaxy) From < New Galaxy() With < .Name = "Tadpole", .MegaLightYears = 400, .GalaxyType = New GType("S"c) >, New Galaxy() With < .Name = "Pinwheel", .MegaLightYears = 25, .GalaxyType = New GType("S"c) >, New Galaxy() With < .Name = "Cartwheel", .MegaLightYears = 500, .GalaxyType = New GType("L"c) >, New Galaxy() With < .Name = "Small Magellanic Cloud", .MegaLightYears = 0.2, .GalaxyType = New GType("I"c) >, New Galaxy() With < .Name = "Andromeda", .MegaLightYears = 3, .GalaxyType = New GType("S"c) >, New Galaxy() With < .Name = "Maffei 1", .MegaLightYears = 11, .GalaxyType = New GType("E"c) >> For Each theGalaxy As Galaxy In theGalaxies Console.WriteLine(theGalaxy.Name & " " & theGalaxy.MegaLightYears & ", " & theGalaxy.GalaxyType) Next End Sub End Class Public Class Galaxy Public Property Name As String Public Property MegaLightYears As Double Public Property GalaxyType As Object End Class Public Class GType Shared Operator &(ByVal left As String, ByVal right As GType) As String Return New String(left & right.ToString()) End Operator Public Sub New(ByVal type As Char) Select Case type Case "S"c MyGType = GType.Type.Spiral Case "E"c MyGType = GType.Type.Elliptical Case "l"c MyGType = GType.Type.Irregular Case "L"c MyGType = GType.Type.Lenticular Case Else End Select End Sub Private _MyGType As String Public Property MyGType As Object Get Return _MyGType End Get Set(ByVal value As Object) _MyGType = value.ToString() End Set End Property Private Enum Type Spiral Elliptical Irregular Lenticular End Enum End Class End Namespace 

Этот код выводит список, содержащий название галактики, расстояние до нее, а также тип галактики. При отладке важно учитывать предназначение кода. Ниже показан формат одной строки из списка, который мы хотим отобразить в выводе:

название галактики, расстояние, тип галактики.

Выполнить приложение

Icon showing Start Debugging button.

Нажмите клавишу F5 или кнопку «Начать отладку» на панели инструментов отладки, расположенной над редактором кода.

По результатам запуска приложения отладчик не демонстрирует никаких исключений. Тем не менее данные, выводимые в окне консоли, не соответствуют ожиданиям. Вот что мы должны были увидеть:

Tadpole 400, Spiral Pinwheel 25, Spiral Cartwheel, 500, Lenticular Small Magellanic Cloud .2, Irregular Andromeda 3, Spiral Maffei 1, Elliptical 

Но вместо этого вы увидите следующие выходные данные:

Tadpole 400, ConsoleApp_FirstApp.GType Pinwheel 25, ConsoleApp_FirstApp.GType Cartwheel, 500, ConsoleApp_FirstApp.GType Small Magellanic Cloud .2, ConsoleApp_FirstApp.GType Andromeda 3, ConsoleApp_FirstApp.GType Maffei 1, 11, ConsoleApp_FirstApp.GType 

По выходным данным и коду мы видим, что GType — это имя класса, содержащего тип галактики. Но мы пытаемся отобразить сам тип (например, Spiral, то есть спиральная), а не имя класса!

Отладка приложения

  1. Пока приложение еще работает, вставьте точку останова. Щелкните правой кнопкой мыши рядом с Console.WriteLine методом, чтобы получить контекстное меню и выберите точку останова вставить точку > останова в всплывающем меню.
foreach (Galaxy theGalaxy in theGalaxies)
For Each theGalaxy As Galaxy In theGalaxies Console.WriteLine(theGalaxy.Name & " " & theGalaxy.MegaLightYears & ", " & theGalaxy.GalaxyType) Next 

В месте установки точки останова в левом поле появится красный круг.

При возникновении проблемы в выходных данных вы начинаете отладку, просматривая предыдущий код, который задает выходные данные в отладчике.

  • Нажмите кнопку «Перезапустить Icon showing RestartApp button in Debug toolbar. » на панели инструментов отладки (CTRL + SHIFT +F5). Выполнение приложения приостановится в заданной точке останова. Место приостановки отладчика будет выделено желтым цветом (при этом желтая строка кода еще не выполнена).
  • Наведите указатель мыши на переменную GalaxyType справа. После этого разверните theGalaxy.GalaxyType слева от значка гаечного ключа. Как вы можете видеть, GalaxyType содержит свойство MyGType , которому присваивается значение Spiral . Screenshot of the Visual Studio Debugger with a line of code in yellow and a menu open below the Galaxy GalaxyType property.Изначально вы ожидаете, что в окно консоли будет выведено именно значение Spiral. Поэтому вы можете получить доступ к значению в этом коде при запуске приложения. В этом сценарии мы используем неверный API-интерфейс. Давайте посмотрим, можно ли исправить это при выполнении кода в отладчике.
  • Во время отладки этого же кода установите указатель мыши в конец элемента theGalaxy.GalaxyType и измените его на theGalaxy.GalaxyType.MyGType . Хотя вы можете внести изменения, редактор кода показывает ошибку, указывающую, что он не может скомпилировать этот код. (В Visual Basic ошибка не отображается, и этот раздел кода работает.)
  • Нажмите клавишу F11 (Шаг отладки>или кнопка «Шаг в шаг» на панели инструментов отладки), чтобы выполнить текущую строку кода. При нажатии клавиши F11 отладчик переходит на одну инструкцию вперед и выполняет соответствующий код. F10 (Step Over) — это аналогичная команда, и оба полезны при обучении использованию отладчика. Откроется диалоговое окно «Изменить и продолжить», указывающее, что изменения не могут быть скомпилированы. Screenshot of the Visual Studio Debugger with a line of code highlighted in red and a message box with the Edit option selected.

    Icon showing Restart app button in Debug toolbar.

    Примечание. Для отладки кода примера Visual Basic пропустите следующие несколько шагов, пока не будет указано, как нажать кнопку «Перезапустить «.

    Screenshot of the Visual Studio Debugger with a line of code highlighted in red and an Error List window with two errors listed.

  • Выберите «Изменить» в окне сообщения «Изменить и продолжить«. Сообщение об ошибке будет выведено в окне Список ошибок. Эта ошибка указывает, что ‘object’ не содержит определение для MyGType . Хотя мы задаем каждую галактику как объект типа GType (имеющий свойство MyGType ), отладчик не считает theGalaxy объектом типа GType . Почему? В этом случае необходимо проверить код, который задает тип галактики. Вы увидите, что класс GType содержит свойство MyGType , однако все же что-то работает не так. Разгадка кроется в сообщении об ошибке для object . Интерпретатор языка воспринимает его как объект object вместо ожидаемого типа GType .
  • Анализируя код, в котором задается тип галактики, вы можете увидеть, что свойство GalaxyType класса Galaxy задается как object вместо GType .

    public object GalaxyType
    public GType GalaxyType

    Icon showing Restart app button in Debug toolbar.

  • Нажмите кнопку «Перезапустить » на панели инструментов отладки (CTRL + SHIFT +F5), чтобы перекомпилировать код и перезапустить. Когда отладчик приостановит выполнение на строке Console.WriteLine , вы можете навести указатель мыши на theGalaxy.GalaxyType.MyGType и убедиться, что значение задано правильно.
  • Удалите точку останова, щелкнув ее кружок в левом поле (также для этого можно выбрать команду Точка останова>Удалить точку останова). После этого нажмите клавишу F5 для продолжения. Приложение запускается и отображает выходные данные. Это выглядит хорошо, но вы заметили одно. Вы ожидали, что небольшая галактика Magellanic Cloud будет отображаться как нерегулярная галактика в выходных данных консоли, но она не показывает вообще типа галактики.

    Tadpole 400, Spiral Pinwheel 25, Spiral Cartwheel, 500, Lenticular Small Magellanic Cloud .2, Andromeda 3, Spiral Maffei 1, Elliptical 
    public GType(char type) 
    Public Sub New(ByVal type As Char) 

    Здесь задается тип галактики, поэтому нам необходимо изучить эту строку более пристально.

  • Нажмите кнопку «ПерезапуститьIcon showing Restart app button in Debug toolbar. » на панели инструментов отладки (CTRL + SHIFT +F5), чтобы перезапустить. Отладчик приостановит работу в строке кода, где вы задали точку останова.
  • Наведите указатель мыши на переменную type . Отображается значение S (после кода символа). Вас интересует значение I , поскольку эта галактика должна иметь тип Irregular (неправильная).
  • Нажмите клавишу F5 и снова наведите указатель мыши на переменную type . Повторяйте этот шаг, пока в переменной type не появится значение I . Screenshot of the Visual Studio Debugger with a line of code in yellow and a window with the type variable value of 73 I.
  • Теперь нажмите клавишу F11 (шаг отладки>).
  • Нажимайте клавишу F11 до тех пор, пока вы не остановитесь в строке кода с инструкцией switch для значения «I» (инструкция Select для Visual Basic). Здесь вы увидите очевидную ошибку, связанную с опечаткой. Вы ожидали, что код будет выполнен дальше до места, где для MyGType задается тип галактики Irregular, однако вместо этого отладчик полностью пропускает этот код и приостанавливает работу в разделе default инструкции switch (инструкция Else для Visual Basic). Screenshot showing the typo error.Взглянув на код, вы заметите опечатку в инструкции case ‘l’ . Оно должно иметь значение case ‘I’ .
  • Выберите в коде и case ‘l’ замените его case ‘I’ на .
  • Удалите точку останова и нажмите кнопку «Перезапустить «, чтобы перезапустить приложение. Теперь все ошибки исправлены и приложение выдает ожидаемые результаты. Нажмите любую клавишу, чтобы завершить работу приложения.
  • Итоги

    Если вы сталкиваетесь с проблемой, воспользуйтесь отладчиком и командами пошагового выполнения, такими как F10 и F11, для поиска области кода, в которой возникают ошибки.

    Если выявить проблемную область кода не удается, задайте точку останова в коде, который выполняется перед возникновением ошибки, после чего используйте команды пошагового выполнения, пока проблема не проявится. Также вы можете использовать точки трассировки для вывода сообщений в окно вывода. Анализируя сообщения, которые выводятся в окно или отсутствуют в нем, нередко можно изолировать область кода, где возникает проблема. Для дальнейшего сужения области поиска этот процесс может потребоваться повторить несколько раз.

    Выявив проблемную область кода, используйте отладчик для ее детального анализа. Чтобы определить причину возникновения проблемы, проверьте код во время выполнения приложения в отладчике.

    • Проверьте переменные и убедитесь, что они содержат значения того типа, который вы ожидаете. Если переменная содержит недопустимое значение, найдите, где оно было задано. Для этого может потребоваться перезапустить отладчик, проверить стек вызовов или выполнить одновременно оба этих действия.
    • Проверьте, выполняет ли ваше приложение код, который вы ожидаете. (Так, в примере приложения должна была выполняться инструкция switch , задающая тип галактики Irregular, однако нужный код был пропущен из-за опечатки.)

    Отладчик представляет собой эффективное средства для выявления ошибок. Средство отладки может искать ошибки вместо вас в том случае, если ему известно предназначение кода. Для этого вы должны указать предназначение. Этого можно добиться с помощью модульных тестов.

    Следующие шаги

    Из этой статьи вы узнали общие принципы отладки приложений. Теперь вы можете приступить к изучению других возможностей отладчика.

    Spellchecking

    PyCharm checks the spelling of all your source code, including variable names, text in strings, comments, literals, and commit messages. For this purpose, PyCharm provides a dedicated Typo inspection which is enabled by default.

    The Typo inspection detects and highlights words that are not included in any dictionary. You can either correct the spelling or save the word to the dictionary.

    Disable the Typo inspection if you want to ignore all spelling mistakes. For more information, refer to Disable spellchecking.

    Correct a misspelled word

    1. Place the caret at any word highlighted by the Typo inspection.
    2. Click or press Alt+Enter to show the available intention actions.
    3. Select one of the suggested fixes from the list.

    In string literals and comments, only the spelling of this particular word at caret changes. For code elements, such as names of variables, functions, classes, and other symbols, the inspection also suggests changing all occurrences via the Rename refactoring.

    Save a word to dictionary

    If a detected typo is actually a valid word, you can add it to a user-defined dictionary that extends the built-in dictionaries.

    1. Place the caret at a word highlighted by the Typo inspection.
    2. Click or press Alt+Enter to show the available intention actions.
    3. Select the Save to dictionary action to add the word to the user’s dictionary and skip it in the future. If you have added the word by mistake, press Control+Z to remove it from the dictionary.

    By default, PyCharm saves words to the global application-level dictionary. You can choose to save words to the project-level dictionary if the spelling is correct only for this particular project. For more information, refer to Select the default dictionary for saving words.

    Press F2 and Shift+F2 to step through all problems in a file, including typos.

    Find all spelling mistakes

    The Typo inspection highlights typos in the current file. You can also run the inspection on your entire project or a set of files. For more information, refer to Run a single inspection.

    1. In the main menu, go to Code | Analyze Code | Run Inspection by Name… or press Control+Alt+Shift+I .
    2. In the Enter inspection name popup, find and select the Typo inspection.
    3. In the Run ‘Typo’ dialog, select the scope in which you want to run the inspection, and other options, such as a file mask filter. Then click OK .

    PyCharm will run the Typo inspection on all files in the selected scope and show all found typos in a separate tab of the Problems tool window.

    Configure the Typo inspection

    By default, the Typo inspection checks all text, including code elements, string literals, and comments in all scopes.

    1. Press Control+Alt+S to open the IDE settings and then select Editor | Inspections .
    2. Expand the Proofreading node and click Typo in the central pane.
    3. In the right-hand pane, configure the Typo inspection: Severity Specify the severity level and the scope in which to apply this level. For example, if you want typos to stand out more, select Error or Warning to highlight typos similar to syntax errors or warnings in your code. Options Specify the type of content to check:
      • Process code : check various code elements.
      • Process literals : check text inside string literals.
      • Process comments : check text inside comments.

    Suppress the Typo inspection

    Like with any other inspection, you can suppress the Typo inspection for specific files and code elements.

    How to suppress the Typo inspection

    1. Place the caret at a word highlighted by the Typo inspection.
    2. Click or press Alt+Enter to show the available intention actions.
    3. On one of the suggested fixes, press the right arrow key or click and select Suppress for class or another relevant suppress action.

    Depending on the language and code element, this adds a special annotation or comment that tells the editor to suppress the relevant inspection in the corresponding scope. For example, in case of Python, suppressing the Typo inspection for a class adds the following annotation before the class declaration:

    # noinspection SpellCheckingInspection

    This suppresses all spelling checks within the class.

    For more information, refer to Suppress inspections.

    Disable spellchecking

    1. Press Control+Alt+S to open the IDE settings and then select Editor | Inspections .
    2. Clear the checkbox next to the Typo inspection.

    Dictionaries

    PyCharm includes bundled dictionaries for all configured languages. You cannot change them directly, but you can extend the spellchecker in other ways:

    • Save words to a built-in global or project dictionary.
    • Add plain-text files with the .dic extension that contain lists of words.
    • You can add Hunspell dictionaries, each of which consists of two files: the DIC file that contains a list of words with the applicable modification rules and the AFF file that lists prefixes and suffixes regulated by a specific modification rule. For example, en_GB.dic and en_GB.aff .

    Configure the spellchecker dictionaries

    1. Press Control+Alt+S to open the IDE settings and then select Editor | Natural Languages | Spelling .
    2. Configure the list of custom dictionaries:
      • To add a new custom dictionary to the list, click or press Alt+Insert and specify the location of the required file.
      • To edit the contents of a custom dictionary in PyCharm, select it and click or press Enter . The corresponding file will open in a new editor tab.
      • To remove a custom dictionary from the list, select it and click or press Alt+Delete .

    Select the default dictionary for saving words

    By default, PyCharm saves words to the global application-level dictionary. You can choose to save words to the project-level dictionary if the spelling is correct only for this particular project.

    1. Press Control+Alt+S to open the IDE settings and then select Editor | Natural Languages | Spelling .
    2. Select either the built-in project-level or application-level dictionary or disable the option to prompt you every time you save a word.

    Add accepted words manually

    1. Press Control+Alt+S to open the IDE settings and then select Editor | Natural Languages | Spelling .
    2. Add words to the Accepted words list. PyCharm adds manually accepted words to the project-level dictionary. You can’t add words that are already present in one of the dictionaries and mixed-case words, such as CamelCase and snake_case .

    The Accepted words list also contains words that you saved to either the built-in global or project dictionary. Although it does not contain words added to the project-level dictionary by other users and words from other custom dictionaries, the Typo inspection will not highlight them.

    Share dictionaries

    PyCharm stores the built-in project-level dictionary with other project-related files. This means that anyone working with the project has access to the words stored in this dictionary.

    To share your application-level dictionary, use the bundled Settings Sync plugin.

    Исправление орфографии в Python с помощью TextBlob

    Орфографические ошибки являются обычным явлением, и большинство людей привыкло к программному обеспечению, указывающему, была ли ошибка допущена. От автокоррекции на наших телефонах до красного подчеркивания в текстовых редакторах — проверка орфографии является важной функцией для многих различных продуктов.

    Первая программа, реализующая проверку орфографии, была написана в 1971 году для DEC PDP-10. Названный SPELL, он был способен выполнять только простые сравнения слов и обнаруживать различия в одной или двух буквах. По мере развития аппаратного и программного обеспечения появляются и средства проверки орфографии. Современные средства проверки правописания способны обрабатывать морфологию и использовать статистику для улучшения предложений.

    Python предлагает множество модулей для этих целей, что делает написание простой проверки орфографии легким 20-минутным испытанием.

    Одной из этих библиотек является TextBlob, которая используется для обработки естественного языка и предоставляет интуитивно понятный API для работы.

    В этой статье мы рассмотрим, как реализовать исправление орфографии в Python с помощью TextBlob.

    Установка

    Во-первых, нам нужно установить TextBlob, поскольку он не предустановлен. Откройте консоль и установите его с помощью pip:

    pip install textblob

    Это должно установить все, что нам нужно для этого проекта. По окончании установки вывод консоли должен включать что-то вроде:

    Successfully installed click-7.1.2 joblib-0.17.0 nltk-3.5 regex-2020.11.13 textblob-0.15.3 

    TextBlob построен на основе NLTK, поэтому он также поставляется с установкой.

    Функция correct()

    Самый простой способ исправить вводимый текст — использовать метод correct() . В качестве примера мы будем использовать абзац из книги Чарльза Дарвина «О происхождении видов», которая является частью общественного достояния и упакована в файл с именем text.txt .

    Кроме того, мы добавим несколько умышленных орфографических ошибок:

    As far as I am abl to judg, after long attnding to the sbject, the condiions of lfe apear to act in two ways—directly on the whle organsaton or on certin parts alne and indirectly by afcting the reproducte sstem. Wit respct to te dirct action, we mst bea in mid tht in every cse, as Profesor Weismann hs latly insistd, and as I have inidently shwn in my wrk on "Variatin undr Domesticcation," thcere arae two factrs: namly, the natre of the orgnism and the natture of the condiions. The frmer sems to be much th mre importannt; foor nealy siimilar variations sometimes aris under, as far as we cn juddge, disimilar conditios; annd, on te oter hannd, disssimilar variatioons arise undder conditions which aappear to be nnearly uniiform. The efffects on tthe offspring arre ieither definnite or in definite. They maay be considdered as definnite whhen allc or neearly all thhe ofefspring off inadividuals exnposed tco ceertain conditionas duriing seveal ggenerations aree moodified in te saame maner. 

    Это полный орфографических ошибок текст, почти в каждом слове. Давайте напишем простой скрипт, используя TextBlob, чтобы исправить эти ошибки и распечатать их обратно в консоль:

    from textblob import TextBlob with open("text.txt", "r") as f: # Opening the test file with the intention to read text = f.read() # Reading the file textBlb = TextBlob(text) # Making our first textblob textCorrected = textBlb.correct() # Correcting the text print(textCorrected) 

    Если вы раньше работали с TextBlob, этот алгоритм будет вам знаком. Мы прочитали файл и его содержимое и создали экземпляр TextBlob , передав содержимое конструктору.

    Затем мы запускаем функцию correct() в этом экземпляре для исправления орфографии.

    После запуска приведенного выше сценария вы должны получить примерно такой результат:

    Is far as I am all to judge, after long attending to the subject, the conditions of life appear to act in two ways—directly on the while organisation or on certain parts alone and indirectly by acting the reproduce system. It respect to te direct action, we must be in mid the in every case, as Professor Weismann he lately insisted, and as I have evidently shown in my work on "Variation under Domesticcation," there are two facts: namely, the nature of the organism and the nature of the conditions. The former seems to be much th are important; for nearly similar variations sometimes arms under, as far as we in judge, similar condition; and, on te other hand, disssimilar variations arise under conditions which appear to be nearly uniform. The effects on the offspring are either definite or in definite. They may be considered as definite when all or nearly all the offspring off individuals exposed to certain conditions during several generations are modified in te same manner. 

    Насколько верна коррекция орфографии TextBlob?

    Как видим, в тексте все еще есть орфографические ошибки. Слова вроде «abl» должны были быть «able» , а не «all» . Хотя даже с ними все равно лучше оригинала.

    Теперь возникает вопрос, насколько это лучше?

    Следующий фрагмент кода представляет собой простой сценарий, который проверяет, насколько хорошо TextBlob исправляет ошибки, на основе этого примера:

    from textblob import TextBlob # A function that compares two texts and returns # the number of matches and differences def compare(text1, text2): l1 = text1.split() l2 = text2.split() good = 0 bad = 0 for i in range(0, len(l1)): if l1[i] != l2[i]: bad += 1 else: good += 1 return (good, bad) # Helper function to calculate the percentage of misspelled words def percentageOfBad(x): return (x[1] / (x[0] + x[1])) * 100 

    Теперь, используя эти две функции, давайте проведем быстрый анализ:

    with open("test.txt", "r") as f1: # test.txt contains the same typo-filled text from the last example t1 = f1.read() with open("original.txt", "r") as f2: # original.txt contains the text from the actual book t2 = f2.read() t3 = TextBlob(t1).correct() mistakesCompOriginal = compare(t1, t2) originalCompCorrected = compare(t2, t3) mistakesCompCorrected = compare(t1, t3) print("Mistakes compared to original ", mistakesCompOriginal) print("Original compared to corrected ", originalCompCorrected) print("Mistakes compared to corrected ", mistakesCompCorrected, "\n") print("Percentage of mistakes in the test: ", percentageOfBad(mistakesCompOriginal), "%") print("Percentage of mistakes in the corrected: ", percentageOfBad(originalCompCorrected), "%") print("Percentage of fixed mistakes: ", percentageOfBad(mistakesCompCorrected), "%", "\n") 

    Запустив его, вы распечатаете:

    Mistakes compared to original (126, 194) Original compared to corrected (269, 51) Mistakes compared to corrected (145, 175) Percentage of mistakes in the test: 60.62499999999999 % Percentage of mistakes in the corrected: 15.937499999999998 % Percentage of fixed mistakes: 54.6875 % 

    Как мы видим, методу correct удалось уменьшить процент орфографических ошибок с 60,6% до 15,9%, что довольно неплохо, однако есть небольшая загвоздка. Он исправил 54,7% слов, так почему все еще остается 15,9% ошибок?

    Ответ — чрезмерное исправление. Иногда он может изменить слово, которое написано правильно, например, первое слово в нашем примере текста, где «As» было исправлено «Is» . В других случаях ему просто не хватает информации о слове и контексте, чтобы сказать, какое слово пользователь намеревался ввести, поэтому он догадывается, что его следует заменить «whl» на «while» вместо «whole» .

    Не существует идеального корректора орфографии, потому что большая часть разговорной речи зависит от контекста, так что имейте это в виду. В большинстве случаев ошибок гораздо меньше, чем в нашем примере, поэтому TextBlob должен работать достаточно хорошо для обычного пользователя.

    Обучающий TextBlob с настраиваемыми наборами данных

    Что, если вы хотите проверить орфографию на другом языке, который не поддерживается TextBlob из коробки? Или, может быть, вы хотите быть немного точнее? Что ж, может быть способ добиться этого. Все сводится к тому, как работает проверка орфографии в TextBlob.

    TextBlob использует статистику использования слов на английском языке, чтобы делать разумные предложения по поводу того, какие слова следует исправить. Он хранит эту статистику в файле с именем en-spelling.txt , но также позволяет вам создать свой собственный файл статистики использования слов.

    Попробуем сделать такой для нашего примера Дарвина. Мы будем использовать все слова из «Происхождения видов» для обучения. Вы можете использовать любой текст, просто убедитесь, что в нем достаточно слов, имеющих отношение к тексту, который вы хотите исправить.

    В нашем случае остальная часть книги предоставит отличный контекст и дополнительную информацию, которая потребуется TextBlob для более точного исправления.

    from textblob.en import Spelling import re textToLower = "" with open("originOfSpecies.txt","r") as f1: # Open our source file text = f1.read() # Read the file textToLower = text.lower() # Lower all the capital letters words = re.findall("[a-z]+", textToLower) # Find all the words and place them into a list oneString = " ".join(words) # Join them into one string pathToFile = "train.txt" # The path we want to store our stats file at spelling = Spelling(path = pathToFile) # Connect the path to the Spelling object spelling.train(oneString, pathToFile) # Train 

    Если мы заглянем в файл train.txt , то увидим:

    a 3389 abdomen 3 aberrant 9 aberration 5 abhorrent 1 abilities 1 ability 4 abjectly 1 able 54 ably 5 abnormal 17 abnormally 2 abodes 2 . 

    Это означает, что слово «a» отображается как слово 3389 раз, а «ably» только 5 раз. Чтобы проверить эту обученную модель, мы будем использовать suggest(text) вместо correct(text) , который представляет собой список кортежей доверия слов. Первым элементом в списке будет слово, в котором он уверен, поэтому мы можем получить к нему доступ через suggest(text)[0][0] .

    Обратите внимание, что это может быть медленнее, поэтому проверяйте орфографию слово за словом, так как сброс огромных объемов данных может привести к сбою:

    from textblob.en import Spelling from textblob import TextBlob pathToFile = "train.txt" spelling = Spelling(path = pathToFile) text = " " with open("test.txt", "r") as f: text = f.read() words = text.split() corrected = " " for i in words : corrected = corrected +" "+ spelling.suggest(i)[0][0] # Spell checking word by word print(corrected) 

    И теперь это приведет к:

    As far as I am all to judge after long attending to the subject the conditions of life appear to act in two ways—directly on the whole organisation or on certain parts alone and indirectly by acting the reproduce system It respect to the direct action we most be in mid the in every case as Professor Weismann as lately insisted and as I have incidently shown in my work on "Variatin under Domesticcation," there are two facts namely the nature of the organism and the nature of the conditions The former seems to be much th are important for nearly similar variations sometimes arise under as far as we in judge dissimilar conditions and on the other hand dissimilar variations arise under conditions which appear to be nearly uniform The effects on the offspring are either definite or in definite They may be considered as definite when all or nearly all the offspring off individuals exposed to certain conditions during several generations are modified in the same manner. 

    Это исправляет примерно 2 из 3 слов с ошибками, что довольно хорошо, учитывая запуск без особого контекста.

    Откуда ошибка Typo: In Word ‘слово’?

    Использую редактор PyCharm для Python, периодически слова в комментариях подчёркиваются волнистой линией, иногда такое же случается с названиями функций, которые я задаю. Слова абсолютно безобидные и написаны без ошибок. Например начинаю комментарий со слова если, он его сразу подчёркивает. Вот что ему не нравится ?
    Читал, что можно добавить слово в словарь и ошибка пропадёт, либо полностью отключить проверку орфографии, но мне интересна сама первопричина, по которой он подчёркивает безобидные слова.

    • Вопрос задан более трёх лет назад
    • 13614 просмотров

    4 комментария

    Простой 4 комментария

    Отладка для абсолютных начинающих

    Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

    Независимо от обстоятельств код, создаваемый разработчиками программного обеспечения, далеко не всегда работает так, как задумано. В некоторых случаях все идет совершенно не по плану! Когда происходит непредвиденное, следующая задача заключается в том, чтобы выяснить, почему, и хотя мы можем просто заманчиво просто следить за нашим кодом в течение нескольких часов, проще и эффективнее использовать средство отладки или отладчик.

    К сожалению, отладчик не является той волшебной палочкой, по мановению которой будут выявлены абсолютно все проблемы в коде. Процесс отладки подразумевает пошаговое выполнение кода в средстве отладки (например, в Visual Studio) в поисках точки, в которой вы допустили ошибку при написании программы. Таким образом вы узнаете, какие исправления нужно внести в код. При этом средства отладки часто позволяют вносить временные изменения, чтобы продолжить работу с программой.

    Эффективное использование отладчика также требует определенных навыков, которые вырабатываются только с практикой, однако умение работать с ним является основополагающим требованием к любому разработчику программного обеспечения. В этой статье мы представим основные принципы отладки и некоторые начальные рекомендации.

    Проанализируйте проблему, задавая себе правильные вопросы

    Это поможет вам выяснить, в чем состоит проблема, прежде чем приступать к ее решению. Мы полагаем, что вы уже сталкивались с проблемами в коде, иначе вряд ли читали бы сейчас эту статью в поисках советов по его отладке! Итак, прежде чем начать отладку, проанализируйте проблему, которую вы пытаетесь решить:

    • Что именно должен был выполнить код?
    • Что произошло на самом деле? Если при запуске приложения возникает ошибка (исключение), это может быть хорошо! Исключение возникает в том случае, если при выполнении кода происходит непредвиденное событие (как правило, это ошибка какого-либо рода). С помощью средства отладки вы можете перейти точно к тому месту в коде, где возникло исключение, и исследовать возможные способы исправления ситуации. Если произошло что-то еще, каковы признаки проблемы? Есть ли у вас предположения относительно того, в каком месте кода возникла проблема? Например, если код должен выводить какой-то текст, но при этом текст содержит ошибки, вы можете сделать вывод, что в этом случае используются неверные данные или код вывода текста содержит ошибки другого рода. При пошаговом выполнении кода в отладчике вы можете изучить каждое изменение переменных и точно определить, когда и каким образом были присвоены неверные значения.

    Проверьте свои предположения

    Прежде чем исследовать причины возникновения ошибки, проверьте предположения, на основании которых вы ожидаете тот или иной результат. Неявные или неизвестные вам предположения могут помешать выявлению проблемы, даже если вы прямо смотрите на ее причину в отладчике. У вас может быть длинный список возможных предположений! Чтобы проверить их, задайте себе несколько вопросов.

    • Используете ли вы нужный API (то есть соответствующие объект, функцию, метод или свойство)? Возможно, используемый вами API работает не так, как вы ожидаете. (После проверки вызова API в отладчике исправление может потребовать поездки в документацию, чтобы определить правильный API.)
    • Правильно ли вы используете API? Даже если вы выбрали нужный API, он может использоваться неправильно.
    • Нет ли в вашем коде опечаток? Некоторые опечатки, например ошибки в написании имени переменной, могут быть незаметными, особенно при работе с языками, в которых не требуется объявление переменных перед их использованием.
    • Вносили ли вы в код изменения, полагая, что они никак не связаны с возникшей проблемой?
    • Должны ли объект или переменная содержать определенное значение (или определенный тип значения) и соответствует ли это действительности?
    • Известно ли назначение кода? Отлаживать чужой код часто бывает сложнее. Если это не ваш код, возможно, для его эффективной отладки вам потребуется изучить, что он делает.

    Совет При написании кода начинайте с небольших и гарантированно работающих фрагментов! (Хороший пример кода полезен здесь.) Иногда проще исправить большой или сложный набор кода, начиная с небольшого фрагмента кода, демонстрирующего основную задачу, которую вы пытаетесь достичь. Затем вы можете последовательно изменять или добавлять код в поисках точки возникновения ошибки.

    Подспрошив предположения, вы можете сократить время, необходимое для поиска проблемы в коде. Вы также можете сократить время, необходимое для устранения проблемы.

    Используйте режим пошагового выполнения во время отладки для поиска места возникновения проблемы.

    Очевидно, что ошибки и неверные результаты можно увидеть только после выполнения кода приложения. Кроме того, работа программы может завершиться неожиданно без каких-либо сообщений.

    При запуске приложения в отладчике, который также называется режимом отладки, отладчик активно отслеживает все, что происходит при запуске программы. Кроме того, вы можете в любой точке приостановить работу приложения, исследовать его состояние и пошагово выполнять код в каждой строке, чтобы видеть в деталях, что происходит.

    Icon showing Start Debugging button.

    В Visual Studio введите режим отладки с помощью F5 (или > команды меню «Запуск отладки» или кнопки «Начать отладку» на панели инструментов отладки). Если возникает исключение, помощник по исправлению ошибок Visual Studio направит вас к точке его появления и предоставит другую необходимую информацию. См. дополнительные сведения об обработке исключений в коде в разделе Приемы и инструменты отладки.

    Если исключение не возникает, возможно, вы имеете некоторое представление о том, где искать проблему в коде. Этот шаг заключается в том, что вы используете точки останова с отладчиком, чтобы дать себе возможность тщательно изучить код. Точки останова — это самая основная и важная функция надежной отладки. Точка останова указывает, в каком месте Visual Studio следует приостановить выполнение, чтобы вы могли проверить значения переменных, работу памяти или последовательность выполнения кода.

    Чтобы задать точку останова в Visual Studio, достаточно щелкнуть в левом поле рядом с интересующей вас строкой кода. Также для этого можно поместить указатель мыши в нужную строку и нажать клавишу F9.

    Чтобы продемонстрировать это, мы рассмотрим пример кода, который уже содержит несколько ошибок. Здесь мы используем C#, однако функции отладки также применяются для Visual Basic, C++, JavaScript, Python и других поддерживаемых языков. Также предоставлен пример кода для Visual Basic, но снимки экрана приведены для C#.

    Создание образца приложения с ошибками

    Затем вы создадите приложение с несколькими ошибками.

    1. Необходимо установить Visual Studio и рабочую нагрузку разработки для классических приложений .NET. Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого. Если необходимо установить рабочую нагрузку, но у вас уже есть Visual Studio, выберите «Сервис >получения инструментов» и «Компоненты». Запускается Visual Studio Installer. Выберите рабочую нагрузку Разработка классических приложений .NET и нажмите Изменить.
    2. Откройте Visual Studio. На начальном экране выберите Создать проект. Введите консоль в поле поиска, выберите C# или Visual Basic в качестве языка, а затем выберите консольное приложение для .NET. Нажмите кнопку Далее. Введите имя проекта, например ConsoleApp_FirstApp , и нажмите кнопку «Далее«. Выберите рекомендуемую целевую платформу или .NET 8, а затем нажмите кнопку «Создать«. Если вы не видите шаблон проекта консольного приложения для .NET, перейдите в раздел «Сервис >получения инструментов и функций«, который открывает установщик Visual Studio. Выберите рабочую нагрузку Разработка классических приложений .NET и нажмите Изменить. Visual Studio создаст консольный проект и откроет его в Обозревателе решений в области справа.
    3. Откройте файл Program.cs (или Program.vb) и замените все его содержимое по умолчанию следующим кодом. (Сначала выберите вкладку для нужного языка: C# или Visual Basic.)

    using System; using System.Collections.Generic; namespace ConsoleApp_FirstApp < class Program < static void Main(string[] args) < Console.WriteLine("Welcome to Galaxy News!"); IterateThroughList(); Console.ReadKey(); >private static void IterateThroughList() < var theGalaxies = new List< new Galaxy() < Name="Tadpole", MegaLightYears=400, GalaxyType=new GType('S')>, new Galaxy() < Name="Pinwheel", MegaLightYears=25, GalaxyType=new GType('S')>, new Galaxy() < Name="Cartwheel", MegaLightYears=500, GalaxyType=new GType('L')>, new Galaxy() < Name="Small Magellanic Cloud", MegaLightYears=.2, GalaxyType=new GType('I')>, new Galaxy() < Name="Andromeda", MegaLightYears=3, GalaxyType=new GType('S')>, new Galaxy() < Name="Maffei 1", MegaLightYears=11, GalaxyType=new GType('E')>>; foreach (Galaxy theGalaxy in theGalaxies) < Console.WriteLine(theGalaxy.Name + " " + theGalaxy.MegaLightYears + ", " + theGalaxy.GalaxyType); >// Expected Output: // Tadpole 400, Spiral // Pinwheel 25, Spiral // Cartwheel, 500, Lenticular // Small Magellanic Cloud .2, Irregular // Andromeda 3, Spiral // Maffei 1, 11, Elliptical > > public class Galaxy < public string Name < get; set; >public double MegaLightYears < get; set; >public object GalaxyType < get; set; >> public class GType < public GType(char type) < switch(type) < case 'S': MyGType = Type.Spiral; break; case 'E': MyGType = Type.Elliptical; break; case 'l': MyGType = Type.Irregular; break; case 'L': MyGType = Type.Lenticular; break; default: break; >> public object MyGType < get; set; >private enum Type < Spiral, Elliptical, Irregular, Lenticular>> > 
    Imports System Imports System.Collections.Generic Namespace ConsoleApp_FirstApp Friend Class Program Public Shared Sub Main(ByVal args As String()) Console.WriteLine("Welcome to Galaxy News!") Call IterateThroughList() Console.ReadKey() End Sub Private Shared Sub IterateThroughList() Dim theGalaxies = New List(Of Galaxy) From < New Galaxy() With < .Name = "Tadpole", .MegaLightYears = 400, .GalaxyType = New GType("S"c) >, New Galaxy() With < .Name = "Pinwheel", .MegaLightYears = 25, .GalaxyType = New GType("S"c) >, New Galaxy() With < .Name = "Cartwheel", .MegaLightYears = 500, .GalaxyType = New GType("L"c) >, New Galaxy() With < .Name = "Small Magellanic Cloud", .MegaLightYears = 0.2, .GalaxyType = New GType("I"c) >, New Galaxy() With < .Name = "Andromeda", .MegaLightYears = 3, .GalaxyType = New GType("S"c) >, New Galaxy() With < .Name = "Maffei 1", .MegaLightYears = 11, .GalaxyType = New GType("E"c) >> For Each theGalaxy As Galaxy In theGalaxies Console.WriteLine(theGalaxy.Name & " " & theGalaxy.MegaLightYears & ", " & theGalaxy.GalaxyType) Next End Sub End Class Public Class Galaxy Public Property Name As String Public Property MegaLightYears As Double Public Property GalaxyType As Object End Class Public Class GType Shared Operator &(ByVal left As String, ByVal right As GType) As String Return New String(left & right.ToString()) End Operator Public Sub New(ByVal type As Char) Select Case type Case "S"c MyGType = GType.Type.Spiral Case "E"c MyGType = GType.Type.Elliptical Case "l"c MyGType = GType.Type.Irregular Case "L"c MyGType = GType.Type.Lenticular Case Else End Select End Sub Private _MyGType As String Public Property MyGType As Object Get Return _MyGType End Get Set(ByVal value As Object) _MyGType = value.ToString() End Set End Property Private Enum Type Spiral Elliptical Irregular Lenticular End Enum End Class End Namespace 

    Этот код выводит список, содержащий название галактики, расстояние до нее, а также тип галактики. При отладке важно учитывать предназначение кода. Ниже показан формат одной строки из списка, который мы хотим отобразить в выводе:

    название галактики, расстояние, тип галактики.

    Выполнить приложение

    Icon showing Start Debugging button.

    Нажмите клавишу F5 или кнопку «Начать отладку» на панели инструментов отладки, расположенной над редактором кода.

    По результатам запуска приложения отладчик не демонстрирует никаких исключений. Тем не менее данные, выводимые в окне консоли, не соответствуют ожиданиям. Вот что мы должны были увидеть:

    Tadpole 400, Spiral Pinwheel 25, Spiral Cartwheel, 500, Lenticular Small Magellanic Cloud .2, Irregular Andromeda 3, Spiral Maffei 1, Elliptical 

    Но вместо этого вы увидите следующие выходные данные:

    Tadpole 400, ConsoleApp_FirstApp.GType Pinwheel 25, ConsoleApp_FirstApp.GType Cartwheel, 500, ConsoleApp_FirstApp.GType Small Magellanic Cloud .2, ConsoleApp_FirstApp.GType Andromeda 3, ConsoleApp_FirstApp.GType Maffei 1, 11, ConsoleApp_FirstApp.GType 

    По выходным данным и коду мы видим, что GType — это имя класса, содержащего тип галактики. Но мы пытаемся отобразить сам тип (например, Spiral, то есть спиральная), а не имя класса!

    Отладка приложения

    1. Пока приложение еще работает, вставьте точку останова. Щелкните правой кнопкой мыши рядом с Console.WriteLine методом, чтобы получить контекстное меню и выберите точку останова вставить точку > останова в всплывающем меню.
    foreach (Galaxy theGalaxy in theGalaxies)
    For Each theGalaxy As Galaxy In theGalaxies Console.WriteLine(theGalaxy.Name & " " & theGalaxy.MegaLightYears & ", " & theGalaxy.GalaxyType) Next 

    В месте установки точки останова в левом поле появится красный круг.

    При возникновении проблемы в выходных данных вы начинаете отладку, просматривая предыдущий код, который задает выходные данные в отладчике.

  • Нажмите кнопку «Перезапустить Icon showing RestartApp button in Debug toolbar. » на панели инструментов отладки (CTRL + SHIFT +F5). Выполнение приложения приостановится в заданной точке останова. Место приостановки отладчика будет выделено желтым цветом (при этом желтая строка кода еще не выполнена).
  • Наведите указатель мыши на переменную GalaxyType справа. После этого разверните theGalaxy.GalaxyType слева от значка гаечного ключа. Как вы можете видеть, GalaxyType содержит свойство MyGType , которому присваивается значение Spiral . Screenshot of the Visual Studio Debugger with a line of code in yellow and a menu open below the Galaxy GalaxyType property.Изначально вы ожидаете, что в окно консоли будет выведено именно значение Spiral. Поэтому вы можете получить доступ к значению в этом коде при запуске приложения. В этом сценарии мы используем неверный API-интерфейс. Давайте посмотрим, можно ли исправить это при выполнении кода в отладчике.
  • Во время отладки этого же кода установите указатель мыши в конец элемента theGalaxy.GalaxyType и измените его на theGalaxy.GalaxyType.MyGType . Хотя вы можете внести изменения, редактор кода показывает ошибку, указывающую, что он не может скомпилировать этот код. (В Visual Basic ошибка не отображается, и этот раздел кода работает.)
  • Нажмите клавишу F11 (Шаг отладки>или кнопка «Шаг в шаг» на панели инструментов отладки), чтобы выполнить текущую строку кода. При нажатии клавиши F11 отладчик переходит на одну инструкцию вперед и выполняет соответствующий код. F10 (Step Over) — это аналогичная команда, и оба полезны при обучении использованию отладчика. Откроется диалоговое окно «Изменить и продолжить», указывающее, что изменения не могут быть скомпилированы. Screenshot of the Visual Studio Debugger with a line of code highlighted in red and a message box with the Edit option selected.

    Icon showing Restart app button in Debug toolbar.

    Примечание. Для отладки кода примера Visual Basic пропустите следующие несколько шагов, пока не будет указано, как нажать кнопку «Перезапустить «.

    Screenshot of the Visual Studio Debugger with a line of code highlighted in red and an Error List window with two errors listed.

  • Выберите «Изменить» в окне сообщения «Изменить и продолжить«. Сообщение об ошибке будет выведено в окне Список ошибок. Эта ошибка указывает, что ‘object’ не содержит определение для MyGType . Хотя мы задаем каждую галактику как объект типа GType (имеющий свойство MyGType ), отладчик не считает theGalaxy объектом типа GType . Почему? В этом случае необходимо проверить код, который задает тип галактики. Вы увидите, что класс GType содержит свойство MyGType , однако все же что-то работает не так. Разгадка кроется в сообщении об ошибке для object . Интерпретатор языка воспринимает его как объект object вместо ожидаемого типа GType .
  • Анализируя код, в котором задается тип галактики, вы можете увидеть, что свойство GalaxyType класса Galaxy задается как object вместо GType .

    public object GalaxyType
    public GType GalaxyType

    Icon showing Restart app button in Debug toolbar.

  • Нажмите кнопку «Перезапустить » на панели инструментов отладки (CTRL + SHIFT +F5), чтобы перекомпилировать код и перезапустить. Когда отладчик приостановит выполнение на строке Console.WriteLine , вы можете навести указатель мыши на theGalaxy.GalaxyType.MyGType и убедиться, что значение задано правильно.
  • Удалите точку останова, щелкнув ее кружок в левом поле (также для этого можно выбрать команду Точка останова>Удалить точку останова). После этого нажмите клавишу F5 для продолжения. Приложение запускается и отображает выходные данные. Это выглядит хорошо, но вы заметили одно. Вы ожидали, что небольшая галактика Magellanic Cloud будет отображаться как нерегулярная галактика в выходных данных консоли, но она не показывает вообще типа галактики.

    Tadpole 400, Spiral Pinwheel 25, Spiral Cartwheel, 500, Lenticular Small Magellanic Cloud .2, Andromeda 3, Spiral Maffei 1, Elliptical 
    public GType(char type) 
    Public Sub New(ByVal type As Char) 

    Здесь задается тип галактики, поэтому нам необходимо изучить эту строку более пристально.

  • Нажмите кнопку «ПерезапуститьIcon showing Restart app button in Debug toolbar. » на панели инструментов отладки (CTRL + SHIFT +F5), чтобы перезапустить. Отладчик приостановит работу в строке кода, где вы задали точку останова.
  • Наведите указатель мыши на переменную type . Отображается значение S (после кода символа). Вас интересует значение I , поскольку эта галактика должна иметь тип Irregular (неправильная).
  • Нажмите клавишу F5 и снова наведите указатель мыши на переменную type . Повторяйте этот шаг, пока в переменной type не появится значение I . Screenshot of the Visual Studio Debugger with a line of code in yellow and a window with the type variable value of 73 I.
  • Теперь нажмите клавишу F11 (шаг отладки>).
  • Нажимайте клавишу F11 до тех пор, пока вы не остановитесь в строке кода с инструкцией switch для значения «I» (инструкция Select для Visual Basic). Здесь вы увидите очевидную ошибку, связанную с опечаткой. Вы ожидали, что код будет выполнен дальше до места, где для MyGType задается тип галактики Irregular, однако вместо этого отладчик полностью пропускает этот код и приостанавливает работу в разделе default инструкции switch (инструкция Else для Visual Basic). Screenshot showing the typo error.Взглянув на код, вы заметите опечатку в инструкции case ‘l’ . Оно должно иметь значение case ‘I’ .
  • Выберите в коде и case ‘l’ замените его case ‘I’ на .
  • Удалите точку останова и нажмите кнопку «Перезапустить «, чтобы перезапустить приложение. Теперь все ошибки исправлены и приложение выдает ожидаемые результаты. Нажмите любую клавишу, чтобы завершить работу приложения.
  • Итоги

    Если вы сталкиваетесь с проблемой, воспользуйтесь отладчиком и командами пошагового выполнения, такими как F10 и F11, для поиска области кода, в которой возникают ошибки.

    Если выявить проблемную область кода не удается, задайте точку останова в коде, который выполняется перед возникновением ошибки, после чего используйте команды пошагового выполнения, пока проблема не проявится. Также вы можете использовать точки трассировки для вывода сообщений в окно вывода. Анализируя сообщения, которые выводятся в окно или отсутствуют в нем, нередко можно изолировать область кода, где возникает проблема. Для дальнейшего сужения области поиска этот процесс может потребоваться повторить несколько раз.

    Выявив проблемную область кода, используйте отладчик для ее детального анализа. Чтобы определить причину возникновения проблемы, проверьте код во время выполнения приложения в отладчике.

    • Проверьте переменные и убедитесь, что они содержат значения того типа, который вы ожидаете. Если переменная содержит недопустимое значение, найдите, где оно было задано. Для этого может потребоваться перезапустить отладчик, проверить стек вызовов или выполнить одновременно оба этих действия.
    • Проверьте, выполняет ли ваше приложение код, который вы ожидаете. (Так, в примере приложения должна была выполняться инструкция switch , задающая тип галактики Irregular, однако нужный код был пропущен из-за опечатки.)

    Отладчик представляет собой эффективное средства для выявления ошибок. Средство отладки может искать ошибки вместо вас в том случае, если ему известно предназначение кода. Для этого вы должны указать предназначение. Этого можно добиться с помощью модульных тестов.

    Следующие шаги

    Из этой статьи вы узнали общие принципы отладки приложений. Теперь вы можете приступить к изучению других возможностей отладчика.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *