Topic: NameError: name [function] 'inserisci' is not defined  (Letto 186 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline antonio67

  • python unicellularis
  • *
  • Post: 9
  • Punti reputazione: 0
    • Mostra profilo
buonasera a tutti . Prima di aprire di il topic ho fatto diverse ricerche sul forum , ma non sono approdato a nulla . ho iniziato con il python da due settimane,
il mio problema e' che ho creato una funzione da richiamare su un altro file , tutto sembra sintatticamente a posto ma all' atto della chiamata da' questo errore NameError: name  'inserisci' is not defined . allego i due listati  ,  prova.py [quello che chiama la funzione] e inserimento.py [quello dove risiede la funzione chiamata.  i due file sono  allo stato "brute" li devo ancora  limare .
spero sarete cosi' gentili da specare un po' del vostro tempo per il mio miserabile problema, ringrazio in anticipo tutti quelli che interverrranno
grazie a tutti.
[PROVA.PY]
#/usr/lib/python3.6
import inserimento
import main
import sys
import psycopg2
import os
interroga = ''
scelta='0'
C=''
U=''
R=''
clear=''
os.system("clear"'\n')
z = 0

y = 0
vit = ''
ve = ''
h = ''
# id = 0

def interroga():
    interroga()
global digit
global x
x = 0
digit =''
try:
   
        conn = psycopg2.connect(database="prova_python" , user="postgres" , host="localhost" , port="5432" ,  password = "antonio" )
        cursor = conn.cursor()
        cursor.execute("select max(id) from lingua_inglese")
        row = cursor.fetchall()
        for row in row:
            x = row[0]
#if x == none :
#int(x) = 0
            conn.close()
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('          PROGRAMMA PER MEMORIZZAZIONE VOCABOLI DI ANTONIO PROVENZANO                     ')
            print('                      SEZIONE INSERIMENTO VOCABOLI                                        ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('              ESTRAPOLAZIONE ID ULTIMO RECORD COMPLETATA!!!!')
            print('                         ID ULTIMO RECORD =',x)
except Exception as e:
      print("Errore di connessione!")
      print(e)
   
       
digit = input ('              QUANTE COPPIE DI VOCABOLI VUOI INSERIRE?    ')
digit = int(digit)
print(digit)
print(x)
inserisci(digit)

--------------------------------------------------------------------------------------------------------------------------------------
[INSERIMENTO.PY]

import main
import sys
import psycopg2
import os
inserimento = ''
inserisci = ''
scelta='0'
C=''
U=''
R=''
clear=''
os.system("clear"'\n')
z = 0
x = 0
y = 0
vit = ''
ve = ''
h = ''
# id = 0


def inserisci(digit):
   
    while z in range(1 , digit):
        y=x+1 
   
    print(x,y)
    os.system("clear"'\n')
    print('                                                                                          ')
    print('                                                                                          ')
    print('                                                                                          ')
    print('                                                                                          ')
    print('                                                                                          ')
    print('                                                                                          ')
    print('                                                                                          ')

    ve = input('  DIGITA IL VOCABOLO INGLESE    ')
    os.system("clear"'\n')
    print('                                                                                          ')
    print('                                                                                          ')
    print('                                                                                          ')
    print('                                                                                          ')
    print('                                                                                          ')
    print('                                                                                          ')

    vit = input('  DIGITA IL VOCABOLO ITALIANO   ')
    os.system("clear"'\n')
    print('                                                                                          ')
    print('                                                                                          ')
    print('                                                                                          ')
    print('                                                                                          ')   
    print('                                                                                          ')
    print('                         VOCABOLO INGLESE=',ve)
    print('                         VOCABOLO ITALIANO=',vit)
    print('                                ID=',y )



    print('                   STO INSERENDO UN RECORD CON ID =',y)
 #print(ve)
# print(vi)
#print(y)
    try:
   
        conn = psycopg2.connect(database="prova_python" , user="postgres" , host="localhost" , port="5432" ,  password = "antonio")
        cursor = conn.cursor()
        cursor.execute ("insert into lingua_inglese ( id , inglese , italiano ) values ( %s , %s , %s )" , ( y , ve , vit ) )
        conn.commit()
        print('                   RECORD CON ID =', y ,'INSERITO!' )
   
    except Exception as e:
        print("Errore di connessione!")
        print(e)
        conn.close()
        def menu_s():
            menu_s()
            scelta=input('  C PER CONTINUARE ,  U PER USCIRE , R PER RITORNARE AL MENU''''PRINCIPALE''' )

            if scelta == "C":
                inserisci()
            elif scelta == "R":
                MAIN.main()

            elif scelta == "U":
             sys.exit() 
            else:
                menu_s()
        return
    return

 

Offline nuzzopippo

  • python erectus
  • ***
  • Post: 228
  • Punti reputazione: 0
    • Mostra profilo
Re:NameError: name [function] 'inserisci' is not defined
« Risposta #1 il: Aprile 15, 2020, 07:41 »
Ciao @antonio67, ben venuto.

L'import di moduli in python è faccenda abbastanza articolata, pur se per la versione 2.x Ti suggerirei di leggere questa pagina del tutorial di python, in linea di massima i concetti si applicano anche alla versione 3.6.
Digeriscilo bene, gli "import" nel Tuo codice sono alquanto estemporanei.

Nello specifico, per utilizzare in "prova.py" una funzione contenuta nel mo modulo "inserimento.py", posto che i due files stiano nella stessa directory, hai tre modalità :
1° - Passo a : in prova.py importi il modulo inserimento.py, istruzione :
import inserimento

   - Passo b : quando devi utilizzare la funzione "inserisci" contenuta nel modulo "inserimento.py" la richiami in questo modo :
inserimento.inserisci()


2° - import direttamente la funzione del modulo "inserimento.py", istruzione :
from inserimento import inserisci

potrai richiamare la funzione come se facesse parte del modulo prova.py (chiamando direttamente "inserisci()" nel codice di prova.py)

3° - ti importi ogni contenuto di inserimento.py, istruzione:
from inserimento import *

Metodo sconsigliato, può dare complicazioni per sovrascrittura di variabili e metodi.

Ovviamente, tutti i metodi indicati andrebbero definiti in prova.py.

P.S. - quando devi inserire del codice in un post, passa con il mouse sulla pulsantiera dell'editor e premi il pulsante che mostrerà il tooltip "pythoncode", appariranno due tags con tale indicazione, il codice inseriscilo tra detti tags

Ciao.

Offline antonio67

  • python unicellularis
  • *
  • Post: 9
  • Punti reputazione: 0
    • Mostra profilo
Re:NameError: name [function] 'inserisci' is not defined
« Risposta #2 il: Aprile 15, 2020, 08:45 »
Ti ringrazio per l' interesse ,  e grazie per i consigli .
sto implementando le funzioni in un unico listato
e ho scoperto che le funzioni non si creano per una questione di tabulazioni e [forse , molto probabile] errori di sintassi
hai per caso qualche link in italiano dove possa approfondire la questione delle tabulazioni e gli errori di sintassi?

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.020
  • Punti reputazione: 9
    • Mostra profilo
Re:NameError: name [function] 'inserisci' is not defined
« Risposta #3 il: Aprile 15, 2020, 10:11 »
Su quale libro stai studiando Python?

Offline antonio67

  • python unicellularis
  • *
  • Post: 9
  • Punti reputazione: 0
    • Mostra profilo
Re:NameError: name [function] 'inserisci' is not defined
« Risposta #4 il: Aprile 15, 2020, 14:52 »
Ho scaricato circa una dozzina di libri da epdf  , in piu' ho scaricato un altra decina di manuali trovati in rete , li leggo un po' tutti , spero di trovare la guida "definitiva"
ho fatto un listato che comprende tutti i moduli , ad escludere quindi il meccanismo di "chiamata da file" penso di aver risolto un po' di cosette ma ora mi da errore  SyntaxError: unexpected EOF while parsing, ecco il listato
#/usr/lib/python3.6.9
import sys
import psycopg2
import os

scelta='0'
C=''
U=''
R=''
clear=''
z = 1
digit = 0
y = 0
vit = ''
ve = ''
h = ''
# id = 0
x = 0
scelta_1 = -1
scelta_2 = -1
os.system("clear"'\n')
def menu():

    while(scelta_1 != 0):

        print()
        print()
        print()
        print("                   MENU' INSERIMENTO")
        print("..............................................................")
        print("   0. USCITA")
        print()
        print("   1. INSERIMENTO VOCABOLI")
        print()
        print("   2. ESTRAZIONE , VISUALIZZAZIONE E STAMPA PAGINE DI  VOCABOLI")
        print()
        print("   3. VISUALIZZAZIONE COPPIE VOCABOLI CON TEST")
        print()
        print("..............................................................")
        print()
        print()
        scelta_1=int(input("  SCEGLI: "))
        print("..............................................................")
        if (int(scelta_1) == 0):
            pass
        elif(int(scelta_1) == 1):
           interroga()

        elif(scelta_1 == 2):
            print("Operazione --beta--")

        elif(scelta_1 == 3):
            print("Operazione --gamma--")

        else:
            #print("Non capisco...")
            os.system("clear"'\n')
            menu()                                    #return
# print("Soddisfatto o rimborsato!")
os.system("clear"'\n')
menu()

def interroga():
    try:

        conn = psycopg2.connect(database="prova_python" , user="postgres" , host="localhost" , port="5432" ,  password = "antonio" )
        cursor = conn.cursor()
        cursor.execute("select max(id) from lingua_inglese")
        row = cursor.fetchall()
        for row in row:
                x = row[0]
        conn.close()
           # except Exception as e:
                #print("Errore di connessione!")
                 #print(e)
        print('                                                                                          ')
        print('                                                                                          ')
        print('                                                                                          ')
        print('                                                                                          ')
        print('                                                                                          ')
        print('                                                                                          ')
        print('                                                                                          ')
        print('          PROGRAMMA PER MEMORIZZAZIONE VOCABOLI DI ANTONIO PROVENZANO                     ')
        print('                      SEZIONE INSERIMENTO VOCABOLI                                        ')
        print('                                                                                          ')
        print('                                                                                          ')
        print('                                                                                          ')
        print('                                                                                          ')
        print('                                                                                          ')
        print('                                                                                          ')
        print('              ESTRAPOLAZIONE ID ULTIMO RECORD COMPLETATA!!!!')
        print('                         ID ULTIMO RECORD =',x)
        if x == None :
             x = int(row[0])
        digit = input('              QUANTE COPPIE DI VOCABOLI VUOI INSERIRE?    ')
        digit = int(digit)
        print(digit)
        print(x)
        return
        inserisci()
        def inserisci():
            while z in range(1 ,digit):
                x=int(x)
            y=x
            os.system("clear"'\n')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            ve = input('  DIGITA IL VOCABOLO INGLESE    ')
            os.system("clear"'\n')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            vit = input('  DIGITA IL VOCABOLO ITALIANO   ')
            os.system("clear"'\n')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                                                                                          ')
            print('                         VOCABOLO INGLESE=',ve)
            print('                         VOCABOLO ITALIANO=',vit)
            print('                                ID=',y )
            print('                   STO INSERENDO UN RECORD CON ID =',y)
            print(ve)
            print(vi)
            print(y)
            try:
                       conn = psycopg2.connect(database="prova_python" , user="postgres" , host="localhost" , port="5432" ,  password = "antonio")
                       cursor = conn.cursor()
                       cursor.execute ("insert into lingua_inglese ( id , inglese , italiano ) values ( %s , %s , %s )" , ( y , ve , vit ) )
                       conn.commit()
                       print('                   RECORD CON ID =', y ,'INSERITO!' )
                       conn.close()
            except Exception as e:
                print("Errore di connessione!")
                print(e)
                menu_a()
        def menu_a():
          while(scelta_2 != 0):

                print()
                print()
                print()
                print("                   MENU_1' INSERIMENTO")
                print("..............................................................")
                print("   0. USCITA")
                print()
                print("   1. INSERIMENTO VOCABOLI")
                print()
                print("   2. ESTRAZIONE , VISUALIZZAZIONE E STAMPA PAGINE DI  VOCABOLI")
                print()
                print("   3. VISUALIZZAZIONE COPPIE VOCABOLI CON TEST")
                print()
                print("..............................................................")
                print()
                print()
                scelta_1=int(input("  SCEGLI: "))
                print("..............................................................")
                #if (int(scelta_2) == 0):
                    #pass
                #elif(int(scelta_2) == 1):
                 #   interroga()
                #elif(scelta_2 == 2):
                 #   print("Operazione --beta--")
                #elif(scelta_2 == 3):
                 #   print("Operazione --gamma--")
                #else:
                 #   print('fine')



        print('soddisfatti o rimborsati')

 

Offline nuzzopippo

  • python erectus
  • ***
  • Post: 228
  • Punti reputazione: 0
    • Mostra profilo
Re:NameError: name [function] 'inserisci' is not defined
« Risposta #5 il: Aprile 15, 2020, 15:32 »
Ho scaricato circa una dozzina di libri da epdf  , in piu' ho scaricato un altra decina di manuali trovati in rete , li leggo un po' tutti , spero di trovare la guida "definitiva"
Non creso sia un buon modo di affrontare un argomento, a mio parere Ti crei confusione e ritardi il Tuo apprendimento.
@Ric avrà certo consigli ed indicazioni migliori dei miei, data la sua più vasta conoscenza, ma Ti suggerirei di adottare una unica fonte di studio, fosse anche quel tutorial che Ti ho lincato, e seguirla con sistematicità e senza fretta.

ho fatto un listato che comprende tutti i moduli , ad escludere quindi il meccanismo di "chiamata da file" penso di aver risolto un po' di cosette ma ora mi da errore  SyntaxError: unexpected EOF while parsing, ecco il listato ...
il "try" in questa funzione:
def interroga():
    try:

        conn = psycopg2.connect(database="prova_python" , user="postgres" , host="localhost" , port="5432" ,  password = "antonio" )

non è seguito da istruzioni di intercettazione di errori, l'interprete python si aspetta di trovare una clausola "except ..." che manca, ritengo sia la causa della segnalazione. Prova a toglierlo e vedi che ti fa.

Detto questo, se posso permettermi un suggerimento, affrontare un database PostgreSQL non è una buona impostazione per un primo approccio, forse Ti sarebbe più utile acquisire le basi del linguaggio prima di affrontare ordini di cose più complesse.

Offline antonio67

  • python unicellularis
  • *
  • Post: 9
  • Punti reputazione: 0
    • Mostra profilo
Re:NameError: name [function] 'inserisci' is not defined
« Risposta #6 il: Aprile 15, 2020, 15:56 »
Ti ringrazio dei preziosissimi suggerimenti e dell' indicazione del presunto errore , a dopo

Offline antonio67

  • python unicellularis
  • *
  • Post: 9
  • Punti reputazione: 0
    • Mostra profilo
Re:NameError: name [function] 'inserisci' is not defined
« Risposta #7 il: Aprile 16, 2020, 07:07 »
Buongiorno!
sembra che il try dia fastidio alla creazione di moduli .  la soluzione sarebbe implementare un db  "raw" con liste e file scritti da programma
ho letto un po' di cose , ma sono piu' confuso di prima e non so proprio da dove cominciare.

Offline nuzzopippo

  • python erectus
  • ***
  • Post: 228
  • Punti reputazione: 0
    • Mostra profilo
Re:NameError: name [function] 'inserisci' is not defined
« Risposta #8 il: Aprile 16, 2020, 07:43 »
sembra che il try dia fastidio alla creazione di moduli .  la soluzione ...

No, non è il "try" a causare problemi, è il suo uso non conforme la fonte del problema.

La gestione delle eccezioni, di cui quella istruzione fa parte, è un aspetto fondamentale di qualsiasi applicazione, in qualsiasi linguaggio, non si può evitarla e deve essere implementata secondo regole ben precise definite dal linguaggio ... come tutto il resto del codice.

La soluzione è apprendere il linguaggio di programmazione.

Quello che stai tentando di fare, utilizzare python per fare "qualcosa" subito, cozza contro il fatto che non conosci python che, come tutti i linguaggi di programmazione, è un argomento molto complesso, il "facile da imparare" che spesso gli viene attribuito è un concetto (molto) relativo.

Fai la cosa saggia  : abbandona la velleità di fare subito qualcosa, concediti un bel po' di tempo e prendi un buon libro su python, poi, studiatelo passo passo, è l'unico approccio razionale alla materia.

In merito al libro, un testo che ho visto spesso indicato da utenti del cui parere ho stima è il "Lutz", purtroppo l'ultima traduzione in italiano è vecchia di ben oltre un decennio.
Se guardi nelle sezioni del forum troverai dei post in materia di testi con pareri di utenti esperti ... evito di indicarti il testo del mio primo impatto perché lo ho visto molto criticare da chi ne sa più di me.

Ciao.
« Ultima modifica: Aprile 16, 2020, 07:46 da nuzzopippo »

Offline antonio67

  • python unicellularis
  • *
  • Post: 9
  • Punti reputazione: 0
    • Mostra profilo
Re:NameError: name [function] 'inserisci' is not defined
« Risposta #9 il: Aprile 16, 2020, 09:50 »
Ho trovato il "Lutx" su epdf , in inglese la terza edizione , cosi' risparmio un po di soldini [non che ne abbia molti....]

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.020
  • Punti reputazione: 9
    • Mostra profilo
Re:NameError: name [function] 'inserisci' is not defined
« Risposta #10 il: Aprile 16, 2020, 09:58 »
> sembra che il try dia fastidio alla creazione di moduli .  la soluzione sarebbe implementare un db  "raw" con liste e file scritti da programma

se questa non è la frase più surreale dell'anno su questo forum. Puro Mallarmè.

Ora, l'OP può continuare per tutto il tempo che vuole ad agitare un secchio di bulloni, ma se spera che prima o poi ne uscirà fuori un aeroplano, mi sa che aspetterà parecchio. Non giudico, eh? Il tempo è tutto suo.

Però suggerisco che il tempo sarebbe impiegato meglio seguendo un libro passo-passo, capitolo per capitolo, paragrafo per paragrafo, senza farsi distrarre e senza saltare in avanti. Il Lutz è in effetti una buona idea.

Di sicuro però un libro che sia *legalmente comprato*, non scaricato da epdf. D'accordo, siamo in Italia e il concetto di legalità qui è sempre... molto sfumato. Ma su questo forum si è sempre mantenuta una politica di *ATTIVO CONTRASTO* a queste pratiche. Cosa volete, siamo così all'antica. Anche perché da queste parti (adesso non più tanto, ma insomma) passano delle persone che magari un libro o due li hanno pure scritti... o un corso, o qualcosa.

Nel frattempo, se l'OP vuole leggere qualcosa di gratis, consiglio questo: https://pythoninwindows.blogspot.com/2020/03/come-imparare-python-senza-studiare.html

Offline antonio67

  • python unicellularis
  • *
  • Post: 9
  • Punti reputazione: 0
    • Mostra profilo
Re:NameError: name [function] 'inserisci' is not defined
« Risposta #11 il: Aprile 16, 2020, 10:20 »
nel frattempo che studio meglio la faccenda dei moduli e dell' accesso al database , mi sto ingegnando di risolvere il problema in altro modo
ho trovato in rete questi listati , uno scrive una lista su un file txt e l'altro la legge , ora dovrei fare in modo che la prima colonna sia un intero [sarebbe il mio indice per il database dei vocaboli]  poi ricreare la lista e renderla disponibile per l' elaborazione e poi trovare un modo di leggere solo l' ultima riga del file txt ricreare la lista , estrarre l'indice ed usarlo poi per inserire i nuovi record[tanta ciccia , lo so'.............] comunque ecco i listati             

#SCRIVE UNA LISTA IN FORMATO TESTO SU UN FILE TXT
score=[1,2,3,4,5]
with open("file.txt", 'w') as f:
    for s in score:
        f.write(str(s) + '\n')


-----------------------------------------------------------------------------

#LEGGE UNA LISTA IN FORMATO TESTO DA UN FILE TXT
with open("file.txt", 'r') as f:
    score = [line.rstrip('\n') for line in f]
    print(score)

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.020
  • Punti reputazione: 9
    • Mostra profilo
Re:NameError: name [function] 'inserisci' is not defined
« Risposta #12 il: Aprile 16, 2020, 22:10 »
Capito tutto, abbiamo.

Offline antonio67

  • python unicellularis
  • *
  • Post: 9
  • Punti reputazione: 0
    • Mostra profilo
Re:NameError: name [function] 'inserisci' is not defined
« Risposta #13 il: Aprile 18, 2020, 13:05 »
Giusto per la cronaca , scavando a fondo , ho scoperto che quello che impediva ai nomi dei moduli di essere riconosciuti e' un baco del compilatore di Python3.6.9  ora mi funziona tutto anche quello che pensavo non funzionasse per colpa mia. saluti a tutti

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.020
  • Punti reputazione: 9
    • Mostra profilo
Re:NameError: name [function] 'inserisci' is not defined
« Risposta #14 il: Aprile 18, 2020, 15:33 »
oh beh... allora è una fortuna che Python non abbia un compilatore, così non corriamo il rischio di inciampare anche noi in questo diabolico baco.