[python] omezeni globalniho slovniku

Martin B. spooky.ln na tbs-software.com
Pátek Březen 4 08:45:24 CET 2011


Zdravím,
hraju si ted se slovníky a zde oblíbenou fcí exec() :).
Hned uvedu příklad, sice blbej ale vysvětluje vše.

script = """if prodano == 10:celkem = 90;mleko -= 1;kafe += 1;print(mleko, kafe)"""

script2 = """f = open(__file__, 'rb'); print(f.read());f.close()"""

mleko = 5
kafe  = 10

def kokos():
    celkem  = 100 
    prodano = 10
    print(locals())
    
    try:
        exec(script, globals(), locals())
        
    except NameError, err:
        print err
        raise SystemExit
    
    print(locals())
    
kokos()

1. dá se nějak definovat globalní slovník na 'safe use' hodnoty?
   chci třeba jen kafe a nechci definovat jiny slovník na použití
   exec(script, my_globals, my_locals) čistě povolit jen něco.

2. Zde ošetruju jen NameError při skriptu který bude obsahovat neplatnou
   proměnnou.Jde i nějak jinak zjistit jestli ten python skript je
   platný? teda bez syntax error? eval() mi ho hazí neustále.

Použití bude v programu kde budu globalni a lokalni hodnoty
upravovat podle udalostí skriptem uloženým v sqlite databázi.
omezeni tam chci kvuli nechtenemu spusteni treba open() fci.
Vim ze tohle slovniky neresi ale pro zacatek chci zacit s temi
promennymi :)

diky za kazde nakopnuti.


Další informace o konferenci Python