Je dois soit appeler exec() ou eval() basé sur une chaîne d'entrée "s"Python: comment savoir si une chaîne représente une instruction ou une expression?
Si "s" était une expression, après avoir appelé eval() je veux imprimer le résultat si le résultat n'était pas Aucun
Si "s" était une déclaration, alors simplement exec(). Si la déclaration arrive à imprimer quelque chose, alors qu'il en soit ainsi.
s = "1 == 2" # user input # --- try: v = eval(s) print "v->", v except: print "eval failed!" # --- try: exec(s) except: print "exec failed!"
Par exemple, "s" peut être:
s = "print 123"
Et dans ce cas, exec() doit être utilisé.
Ofcourse, je ne veux pas essayer d'abord eval() et si elle échoue exec d'appel()
Et si l'utilisateur entre un code malveillant? Et que peut * donner l'utilisateur en entrée (n'importe quel code Python, ou une langue "plus petite")? –
Bonjour Bart, C'est à l'utilisateur de taper ce qu'il veut. Je viens de fournir un shell Python en utilisant ma propre interface utilisateur –