exec retorna um não-tipo, quando preciso do valor de retorno
Fiz uma pergunta mais cedo, mas tive um segundo problema.
Estou escrevendo um programa que lê um arquivo de texto e executa todo o código dentro do arquivo. Isso é para aula, e nós temos que usarexec()
Eu recebo esse erro ao executar o código, e inúmeras pesquisas não me levaram a uma solução.
Traceback (most recent call last):
File "doxecute.py", line 28, in <module>
replace_code(statements, contents)
File "doxecute.py", line 17, in replace_code
contents = contents.replace("{%" + statement + "%}", statement)
TypeError: Can't convert 'NoneType' object to str implicitly
Código é
import sys
import re
def sortecute(data):
funcs = re.findall(r'{%(.*?)%}',data,re.DOTALL)#find executable statements
return funcs
def replace_code(statements, contents):
for statement in statements:
if not statement[5:].startswith("print("):
exec(statement[5:]) #execute code after the (letter)
contents = contents.replace("{%" + statement + "%}", "")
else:
statement = exec(statement[5:])#error is here
contents = contents.replace("{%" + statement + "%}", statement)
print(contents)
f = open(sys.argv[1],"r")
contents = f.read()
f.close()
statements = sortecute(contents) #get data from file
statements = sorted(statements) #sorts by letter
replace_code(statements, contents)
este é o arquivo que eu li.
The number {% (c) print(x) %} is a random number between 1 and 6
inclusive. If we multiply it by 2, we get {% (d) print(2*x) %}.
What's interesting is that the statements may appear out of order in the
document. {% (a) import random %} Thus I might generate the random
number in a location in the document well after referencing it.
{% (b) x = random.randint(1,6) %}
Não consigo descobrir como obter o valor da instrução para exec. Alguém pode me explicar como usar isso corretamente da maneira listada abaixo
You will need to use the exec function in Python. To get the output back, you will need to redirect output to your own stream. Your program should accept a filename as a command-line argument to operate on [8]