Для чего практически встроена синтаксическая ошибка в Python?

1

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

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

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

try:
    raise SyntaxError
except: pass

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

  • 1
    Его можно использовать для обработки элементов, проанализированных, например, с помощью ast.literal_eval .
Теги:
error-handling
syntax
syntax-error

3 ответа

3
Лучший ответ

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

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

  • 0
    Итак, import ... , __import__(...) , exec(...) и eval(...) ? Это оно?
  • 0
    @EthanK вы также можете столкнуться с ошибками при кодировании, такими как SyntaxError: не-ASCII символ ...
Показать ещё 2 комментария
1

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

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

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

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

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

  • 0
    Хороший технический ответ! Спасибо за то, что так много оглядываетесь!
1

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню