Ho provato solo questo nel REPL, al di fuori di qualsiasi blocco, finora. Potrebbe essere possibile farlo funzionare anche altrove.
ho messo nel mio file di avvio 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
rapidi sessione REPL afterwords dimostrazione:
>>> Awesome bare words
BARE WORDS!
Utilizzare in modo responsabile.
Modifica: ecco un esempio più utile. Ho aggiunto una parola chiave 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
è un elenco di variabili che, quando viene visualizzato il mio messaggio, verrà automaticamente controllato e reimmessa. Così, per esempio, posso fare questo:
>>> from loadBalanceTester run loadBalancerTest(runJar = False)
E questo viene interpretato come:
from loadBalancerTest import loadBalancerTest
loadBalancerTest(runJar = False)
E 'un po' come un macro - è comune per me di voler fare questo genere di cose, così ho deciso di aggiungere una parola chiave che mi consenta di farlo in un numero inferiore di tasti.
Qualcuno si preoccupa di spiegare perché stanno facendo downvoting/votando per chiudere? Sto condividendo conoscenze che potrebbero essere utili per chiunque cerchi di aggiungere nuove parole chiave in Python senza dover effettivamente modificare il codice sorgente dell'interprete e ricompilarlo. Questo potrebbe essere usato impropriamente? Quasi certamente lo sarà. Ma se vuoi davvero farlo, allora ti ho fornito questo per te. E se non vuoi farlo, allora vai avanti - non c'è bisogno di downvotare o votare per chiudere. – ArtOfWarfare
Un caso d'uso interessante per questo sarebbe l'implementazione di un'interfaccia a riga di comando interattiva senza input(). In questo modo, hai la piena potenza di una shell interattiva e di un cli allo stesso tempo. È un anti-pattern, ma è interessante. – RobotHumans
Sei troppo avanti rispetto alla curva: ecco perché ... **; -) ** Non è inventando un tablet che farai soldi ma perfezionandolo e chiamandolo iPad, lo farai, quindi 1 up-vote (che neutralizzerà 5 down-vote) **>: -) ** – Fabby