J'écris un script python dans python 3.x dans lequel j'ai besoin de redéfinir la fonction print
. Quand je le fais avec mon interprète, ça fonctionne bien. Mais quand je crée une fonction en utilisant le même code, cela donne une erreur.Redéfinition de la fonction d'impression ne fonctionnant pas dans une fonction
Voici mon code:
list = ["print('Wow!')\n", "print('Great!')\n", "print('Epic!')\n"]
old_print = print
def print(s):
global catstr
catstr += s
catstr = ""
for item in list:
s = item
exec(s)
print = old_print
catstr
>> 'Wow!Great!Epic!'
Comme vous pouvez le voir, je l'ai obtenu mon résultat souhaité: 'Wow!Great!Epic!'
Maintenant, je fais une fonction en utilisant le même code:
def execute(list):
old_print = print
def print(s):
global catstr
catstr += s
catstr = ""
for item in list:
s = item
exec(s)
print = old_print
return catstr
maintenant lorsque j'exécute cette fonction en utilisant le code suivant:
list = ["print('Wow!')\n", "print('Great!')\n", "print('Epic!')\n"]
execute(list)
J'obtiens l'erreur suivante:
old_print = print
UnboundLocalError: local variable 'print' referenced before assignment
Est-ce que quelqu'un sait pourquoi cela ne fonctionne pas dans une fonction?
Toutes les suggestions sur la façon de le réparer seront très appréciées.
C'est la première ligne comme vous définissez l'impression dans la fonction et en tant que fonction, qu'est-ce que vous utilisez old_print etc .. du tout? –
Quel est le but de votre question? Ou est-ce juste par curiosité? – BPL
@BPL Il est directement lié comme une question de suivi, ils ont demandé hier [ici] (http://stackoverflow.com/questions/39460882/how-to-get-execution-of-python-print-statements-as-a -string) – idjaw