Для чего практически встроена синтаксическая ошибка в Python? - PullRequest
0 голосов
/ 02 января 2019

Какой смысл встроенного в python SyntaxError?Похоже, он не имеет практического применения, потому что интерпретатор python находит SyntaxError до кода.Пример:

try:
    &@!5_+ #SyntaxError
except: pass

Это происходит с SyntaxError, потому что SyntaxError найден до того, как его можно будет обработать.Теперь это работает и не работает тихо, как предполагалось:

try:
    raise SyntaxError
except: pass

Однако я никогда не видел, чтобы function или class или что-либо повышало SyntaxError.Итак, почему это так легко использовать и ловить, когда единственное использование, кажется, поднимает его бессмысленно?Есть ли место, где питон поднимает SyntaxError, чтобы его можно было поймать?Или он просто выходит из встроенной области, просто чтобы быть там?

Ответы [ 3 ]

0 голосов
/ 02 января 2019

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

find . -type f -name "*.py" | xargs grep "raise SyntaxError"

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

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

Я не очень хорошо знаком с внутренними компонентами Python, но я предполагаю, что смог обработать ошибку при обработке исходного кодатак же, как они обрабатывают другие ошибки, все становится лучше.Плюс eval и т. Д. Должны что-то поднять, как документы и предыдущее состояние ответа.

0 голосов
/ 02 января 2019

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

Единственный случай, когда я могу подумать, что вы когда-нибудь поймаете SyntaxError, это если вы используете exec или eval нанеизвестное значение.Например, если вы выполняли пользовательский ввод, то этот ввод может быть недействительным, и вам нужно будет перехватить SyntaxError.

0 голосов
/ 02 января 2019

Я считаю, что документация не требует пояснений:

Возникает, когда синтаксический анализатор обнаруживает синтаксическую ошибку.Это может произойти в операторе импорта, при вызове встроенных функций exec() или eval() или при чтении исходного сценария или стандартного ввода (также в интерактивном режиме).

...