Голые слова/новые ключевые слова в Python

Я хотел посмотреть, можно ли определить новые ключевые слова или, как они называются в WAT Destroy All Software, при обсуждении Ruby, голых слов в Python.

Я придумал ответ, который я не мог найти в другом месте, поэтому решил поделиться стилем Q & A на StackOverflow.

Ответы

Ответ 1

Я только пробовал это в REPL, вне любого блока, до сих пор. Возможно, это станет возможным и в других местах.

Я положил это в мой файл запуска python:

def bareWordHandler(type_, value, traceback_):
    if isinstance(value, SyntaxError):
        import traceback

        # You can probably modify this next line so that it'll work within blocks, as well as outside them:
        bareWords = traceback.format_exception(type_, value, traceback_)[1].split()

        # At this point we have the raw string that was entered.
        # Use whatever logic you want on it to decide what to do.
        if bareWords[0] == 'Awesome':
            print(' '.join(bareWords[1:]).upper() + '!')
            return
    bareWordsHandler.originalExceptHookFunction(type_, value, traceback_)

import sys
bareWordsHandler.originalExceptHookFunction = sys.excepthook
sys.excepthook = bareWordsHandler

Быстрые демонстрации демонстраций сеанса REPL:

>>> Awesome bare words
BARE WORDS!

Используйте ответственно.

Изменение: Здесь более полезный пример. Я добавил в ключевое слово run.

if bareWords[0] == 'from' and bareWords[2] == 'run':
        atPrompt.autoRun = ['from ' + bareWords[1] + ' import ' + bareWords[3].split('(')[0],
                            ' '.join(bareWords[3:])]
        return

atPrompt.autoRun - это список переменных, которые, когда отображается мое приглашение, будут автоматически проверяться и возвращаться обратно. Так, например, я могу это сделать:

>>> from loadBalanceTester run loadBalancerTest(runJar = False)

И это интерпретируется как:

from loadBalancerTest import loadBalancerTest
loadBalancerTest(runJar = False)

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