Ответ 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)
Это похоже на макрос - мне обычно хочется делать такие вещи, поэтому я решил добавить ключевое слово, которое позволяет мне делать это за меньшее количество нажатий клавиш.