Tooprogram.ru

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Ошибка 1 syntax error

О, нет, ошибки! И как с ними справляться

Листочек

Самый действенный способ понять, как работает участок кода — это расписать его выполнение на бумажке, как если бы вы были компьютером (медленным и немного голодным).

Метод утенка

Метод утёнка — психологический метод решения задачи, делегирующий её мысленному помощнику. Метод описан в книге «Программист-прагматик».

Тестируемый ставит на рабочем столе игрушечного утёнка (или представляет его мысленно; на самом деле уточка — это условно, предмет может быть любым), и когда у него возникает вопрос, на который трудно ответить, то он задаёт его игрушке, как живому человеку, словно она действительно может ответить.

Считается, что правильная формулировка вопроса содержит как минимум половину ответа, а также это дает толчок мыслям, направляя их в нужное русло.

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

Конспект урока

  1. Syntax error. Неверное использование языка. Часто лишние или недостающие скобки или кавычки. Что делать? Заменить, удалить или добавить символы. Часто проблема в скобках или кавычках: открытые скобки должны быть закрыты, открытые кавычки должны быть закрыты.
  2. Reference error. Использование несуществующего названия. Что делать? Проверить, существует ли то, на что вы ссылаетесь. Возможно вы использовали ошибочное название или забыли его создать.
  3. Type error. Использование неверного типа, например попытка вызвать константу числа, как функцию. Что делать? Убедиться, что всё используется верно. Часто проблема в простой путанице: вы создали численную константу и функциональную константу, а потом пытаетесь вызвать число. Вероятно вы собирались вызвать функцию.
  4. Logic error. (Логическая ошибка) Ваш код выполняет не то, что требуется, но программа запускается и не выдаёт ошибок трёх перечисленных выше типов. Сломана логика. Что делать? Проверить свой код, убедиться, что он выполняет то, что должен.

Транскрипт урока

У вас вечеринка, а закуска кончилась, вы просите подругу что-нибудь купить.

— Эй, можешь сходить в магазин и купить какой-нибудь еды?

— Ну, типа чипсы или что-нибудь такое. У нас всё закончилось.

— Сколько упаковок чипсов взять?

И у вас уже начинает немного вскипать мозг:

— Да, я не знаю, штук 5.

И вы так глазами делаете и отвечаете «ааа… забудь», или решаете идти до конца и объясняете подробно задачу: «Возьми 5 средних пакетов картофельных чипсов со вкусом бекона».

Десять минут спустя она возвращается с пустыми руками и говорит «у них не было таких чипсов в пакетах среднего размера».

О «программистах» есть определённые стереотипы и то, что они могут быть слишком конкретными и чересчур дотошными — один из них. Многие думают, что такие люди хорошо разбираются в математике или что-то подобное.

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

Такой способ поведения компьютеров ведёт ко множеству ошибок. Если вы наберёте console,log — console запятая log, вместо console точка log, JavaScript скажет «Понятия не имею, что ты имел в виду».

Читать еще:  Внутренняя ошибка 2755

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

Ошибка вроде «запятая вместо точки» это тип, который проще всего заметить и исправить. Это «синтаксическая ошибка», потому что неверный символ, как запятая в этом случае, нарушает синтаксические правила языка.

Когда вы запускаете код с такой ошибкой, интерпретатор JavaScript — та штука, которая исполняет JavaScript-программы — пожалуется: SyntaxError и укажет вам на то место, где по его мнению есть проблема.

Вот, например, это определение функции и в конце — лишняя скобка. Её там быть не должно и это ломает всю программу, поэтому JavaScript жалуется: «SyntaxError:» Unexpected token (символ))». Эта скобка unexpected — неожиданная.

Синтаксическая ошибка — это как если кто-то бредит вслух. Никто вокруг ничего не понимает.

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

Если вы вызовете ads вместо abs , интерпретатор JavaScript пожалуется: ReferenceError: ads is not defined . Вы использовали, как вам кажется, существующее название, но на самом деле такого названия нет.

Несколько строк, которые следуют после указания ошибки, могут смутить и оттолкнуть вас, но они тут только для пользы. Это stack trace — последовательность вызовов функций, которая привела к ошибке. Когда вы запускаете свою программу, даже крошечную, она становится частью чего-то более крупного — сложной системой JavaScript-кода, который приводятся в действие, чтобы оживить вашу программу. Тут видно, что проблема была в моём файле. Следующая строка — это место, откуда был вызван мой код, третья строка — откуда была вызвана вторая и в таком духе можно продолжать дальше. Это как отслеживать шаги в обратном направлении — проблема есть, и мы можем возвращаться по одному шагу назад и смотреть, не нашлась ли ошибка.

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

ReferenceError может случиться с другими константами: например, если ваш код содержит 10 * pi , а pi не существует, потому что вы не создавали константу с точно таким названием, вы получите ReferenceError.

ReferenceError — это как называть кого-то чужим именем.

Следующий тип ошибки — когда вы путаете одну вещь с другой. Взгляните на этот код:

Сначала мы создали константу. Помните, что это как давать чему-то название: в нашем случае — числу 12 даётся название length . В следующей строке мы вызываем функцию length и передаём ей аргумент — число 54. Но подождите! length — это не функция! Это всего лишь число. Числа — это не функции, не ящики, которые производят какие-то действия. И JavaScript пожалуется именно на это:

Это Ошибка типизации: тип объекта, который вы использовали, неверный. Интерпретатор JavaScript не скажет чем что-то является, но точно скажет чем оно не является. length — это не функция.

Ошибка типизации — это как просить кошку постирать бельё. Возможно, вы хотели попросить об этом вашего друга.

Все эти ошибки — syntax error, reference error и type error — возникают из-за использования неправильных слов. И все они предельно очевидные: вы видите сообщение об ошибке и достаточно хорошо понимаете в чём проблема. Обычно сразу понятно, как их исправить:

  1. Синтаксическая ошибка? Заменить, удалить или добавить символы. Часто проблема в скобках и кавычках: открытые скобки и открытые кавычки должны быть закрыты.
  2. Reference error? Проверить, существует ли тот объект, на который вы ссылаетесь. Возможно, вы использовали неправильное название или забыли создать его.
  3. Ошибка типизации? Убедиться, что вы используете объекты верно. Часто проблема — простая путаница: вы создали и числовую константу и функцию, а потом пытаетесь вызвать число. Наверное, вы хотели вызвать функцию.
Читать еще:  Основные ошибки в презентациях

Последний тип ошибки, о котором мы сегодня поговорим — самый злой: Логическая ошибка. Допустим, мы пишем функцию, которая конвертирует градусы по фаренгейту (F) в градусы по цельсию (C). Чтобы сконвертировать температуру по одной шкале в другую, нужно вычесть 32 и умножить на 5/9. Например (50°F — 32) x 5/9 = 10°C.

Выглядит нормально? Давайте запустим эту функцию, сконвертируем 50 градусов и выведем на экран:

И у нас получилось 32.22222222222222. Не 10. Что произошло? JavaScript не пожаловался, когда код запустился, никаких ошибок не выскакивало. Компьютер не знает, что нам нужно, поэтому он производит вычисление, как мы его и просили. Но такое вычисление ошибочно — допустили ошибку мы. Нам нужно вначале вычесть 32, а потом умножить это на 5/9. Но мы не использовали скобки, поэтому 32 вначале умножилось на 5/9, а затем результат был отнят от температуры в фаренгейтах.

Это Логическая ошибка. Мы не нарушили никаких правил, мы просто сделали что-то не то. Наш пример был простым: мы написали функцию, запустили её и увидели неверный результат. Но представьте, что функция — это только маленькая частица крупной системы. Приложение для формирования бюджета в огромной организации отправляет отчёт в главную бухгалтерию, что в следующем месяце для оплаты счёта за электричество требуются дополнительные $300 000. Организуется экстренное собрание, увольняют людей, генеральный директор снова уходит в запой. Что случилось?

Иногда обнаружить проблему может оказаться трудной задачей: система кондиционирования ожидает, что январская температура будет 32 градуса по цельсию, вместо 10, потому что кто-то забыл использовать скобки в функции.

Борьба с логическими ошибками — это целиком ваша ответственность. И временами — тяжёлая работа, но в конце приходит сильное облегчение и удовлетворение: а-ааа, так вот в чём была проблема!

Теперь ваша очередь делать ошибки! Выполните тест и упражнение, чтобы ощутить боль.

Level 1 Wiki

Are you sure it’s a syntax error?

If it does not contain the word «SyntaxError» it must be a run time error.

Line numbers

The error message will give you a line number or highlight a point on your code. You should debug the line based on what you are doing on that line: for example, if the highlighted line is an assignment, make sure you have the right syntax for an assignment. Be careful — sometimes a mistake on one line can cause an error on the line before or the line after or even, in some cases, right at the end of the file.

Читать еще:  Ошибка невозможно открыть этот установочный пакет

Common Errors

Some very common syntax errors are:

Sometimes, misspelling a Python keyword can cause syntax errors.

Don’t forget that Python is case sensitive! This includes keywords (like «def», «for» and «while») as well as variable names. There are some examples of misspelt variable names here.

In the following example, the «while» keyword has been incorrectly spelt with a capital «w». Note that in this case, the error message is a little
misleading since the arrow points to the wrong part of the code.

Missing off a colon from the end of an if or while line.

In the following example, a colon is missing from the end of the if conditional line.

The wrong number of brackets in function calls or expressions.

In the following example, a bracket is missing to complete the expression at the end of the line. Note that the error message points to the line below where the error actually occurs.

In this example, an opening bracket is missing from the raw_input function call.

Missing quotation marks: you need to use «string», not «string.

In this example, the literal «world» is missing a closing quotation mark. If you read the error carefully (in which ‘EOL’ means ‘End of Line’), you will see it is saying that it found the end of the line while scanning through a string — and this is a problem because we need the closing quote on the same line. Always try to get information from the error message.

Incorrect indentation

Sometimes, Python will report [indentation problems] as syntax errors.

Examples

If your code is not working, you should try comparing it to code that does work. Here are some possibilities for working code:

  1. Lecture notes and sample code provided on the course.
  2. Code you have written yourself in previous exercises.
  3. Code from the web. Try these: assignments, if statements, for statements, function definitions.
  4. There’s also a great page here that might help. Try it 🙂

Simplify

Your code may be too complicated to tell which part of it is causing the error. In this case, try removing some of the complexity until it does work. Once the error has disappeared, try adding the complex code you need a piece at a time until you can identify the source of the problem. Maybe one of the pieces you have added has not been expressed in a way Python can understand. Comparing to examples may help.

Indentation

Python uses indentation to show where each block of code begins and ends. Indentation can be achieved with spaces or tabs, but a mixture will almost always lead to confusion and errors. Since a tab and 4 spaces look the same on the screen, two pieces of code can look identical to you, but to Python they look entirely different. This is the cause of many non-obvious errors. If your code looks perfect but is still giving syntax errors, check that your indentation is correct.

Below are two causes of indentation errors, one in a function and one in a loop. In both cases, spaces have been mixed with tabs.

Ссылка на основную публикацию
Adblock
detector