Global variable is not defined

2

I have investigated for hours why this error. I already used global and it did not work and other programs I created resulted. Error code:

def editor():
texto = raw_input("digite o texto que quer que o menu principal imprima:")
if texto == str():
    print "%s" %(texto)
else:
    print "%s" %(texto)

def arranque():
    print "%s" %(texto)
    maquina = raw_input("")
    if machine == "B".upper():
        print "A iniciar a BIOS..."
    for i in range(1000):
        print "..."
arranque()

Complete code:

#============<<<código de carregamento de dados>>>============#
def ler():                                                    #
    with open('maquina virtual 1ªversão.txt', 'r') as f:      #
        linhas = f.readlines()                                #
        return linhas                                         #
    f.close()                                                 #
                                                              #
if __name__ == "__main__":                                    #
    dados = ler()                                             #
#============<<<código de carregamento de dados>>>============#
def editor():
    texto = raw_input("digite o texto que quer que o menu principal imprima:")
    if texto == str():
        print "%s" %(texto)
    else:
        print "%s" %(texto)

#============<<<código de salvação de dados>>>============#
def guardarAlteracao(dado):                               #
    with open('maquina virtual 1ªversão.txt', 'r+') as f: #
        f.write(dado)                                     #
    f.close()                                             #
#============<<<código de salvação de dados>>>============#


#função que inicia a máquina virtual (função que coopera com a função bios()-> se esta    tiver sido indevidamente alterada pelo usuário, esta impede o arranque do SO):
def arranque():
    print "%s" %(texto)
    maquina = raw_input("")
    if machine == "B".upper():
        print "A iniciar a BIOS..."
    for i in range(1000):
        print "..."
arranque()

#função principal(1ª)--> bios:
def bios():
    print "------------------ \n"
    print "BIOS setup utility \n"
    print "------------------"
    opcao =raw_input("Está no menu da BIOS. Escolha o que pretende aceder: Informações do sistema, Data, Avançadas(secção ainda a concluir), Configurações do SO (escreva quit para voltar ao menu e back se quiser voltar ao menu principal da BIOS) \n")
    if opcao == "Informações do sistema":
        print "--------------"
        print "Maquina virtual"
        print "--------------"
        print "Versão: 1.0v 32bit \n Data da criação: 07/06/14 \n Compatível com Windows XP, Windows Vista, Windows 7, Windows 8, Unix, Linux, Ubuntu e Mac OS"
        print "Todos os direitos reservados © 2014"
        rebobinar = raw_input("")
        if rebobinar == "back":
            bios()
    elif opcao == "Data":
        print "--------------"
        print "Data"
        print "--------------"
        print "Sistema Operativo(simulado): BITsky one® \nInterface: Literal (e GUI nas próximas atualizações) \nLinguagem de programação predefinida: Python"
        import win32api
        path = "C:/"
        info = win32api.GetVolumeInformation(path)
        print( "Número da série do disco rígido: = %d" % info[1] )
        rebobinar = raw_input("")
        if rebobinar == "back":
            bios()
    elif opcao == "Avançadas":
        print "--------------"
        print "Avançadas"
        print "--------------"
        configurar = raw_input("Para configurar as defenições da máquina virtual, escreva a password bitwise para aceder: \n")
        if configurar == "0b10b100b110b100":
            print "As opções disponíveis são: \nAlterar a forma de inicialização, \nDesinstalar SO, \nCriar permissões especiais para a VM, \nVer código fonte da VM"
            avanced = raw_input("")
            if avanced == "Alterar a forma de inicialização":
                alterar = raw_input("O que deseja alterar: \nApresentação inicial da VM, \nApresentar código de arranque, \nEditar código(aviso: qualquer alteração incorreta destes pode instabilizar a VM)?")
                if alterar == "Apresentação inicial da VM":
                    editor()
                    save = raw_input("Guardar alterações?")
                    if save == "sim" or save == "si" or save == "s".lower():
                        guardarAlteracao('Alguma coisa aqui')
                    rebobinar = raw_input("")
                    if rebobinar == "back":
                        bios()
                elif alterar == "Apresentar código de arranque":
                    #código ainda não concluído
                    if rebobinar == "back":
                        bios()
                elif alterar == "Editar código":
                    #código ainda não concluído
                    quit()
            elif avanced == "Desinstalar SO":
                deletar_so = raw_input("Tem mesmo a certeza (atenção: depois não pode restaurar e pode perder dados)?)")
                if deletar_so == "sim" or deletar_so == "yes":
                    for i in range(1234):
                        print "A desinstalar o SO..."
                    #função bitsky_one--> deletar
                    print "SO desinstalado."
            elif avanced == "Criar permissões especiais para a VM":
                password()
bios()

Error:

Traceback (most recent call last):
  File "C:\Documents and Settings\Cristina\Ambiente de trabalho\maquina virtual 1ªversão.py", line 36, in <module>
    arranque()
  File "C:\Documents and Settings\Cristina\Ambiente de trabalho\maquina virtual 1ªversão.py", line 28, in arranque
    print "%s" %(texto)
NameError: global name 'texto' is not defined
    
asked by anonymous 11.06.2014 / 23:59

1 answer

2

Declare the variable texto out of the function.

texto = ""

def editor():
   global texto
   texto = raw_input("digite o texto que quer que o menu principal imprima:")

def arranque():
    print "%s" %(texto)
    maquina = raw_input("")
    if machine == "B".upper():
        print "A iniciar a BIOS..."
    for i in range(1000):
        print "..."

arranque()
    
12.06.2014 / 00:08