Vs code come IDE di python

di il
3 risposte

Vs code come IDE di python

Ho cominciato a scrivere un nuovp progettino in python. Per farlo ho installato ed utilizzato VS Code.
Dopo le prime difficoltà ambientali col nuovo strumento, riesco a muovermi abbastanza agevolmente.
Devo dire che utilizzo python3.6.8 in LinuxMint.Ho provato ad avviare il programma in Debug e ricevo questa segnalazione d'erorre
Si è verificata un'eccezione: NameError
name 'main' is not defined
File "/media/dirdati/dativari/python_vari/python_progetti/superEnalotto/SupEna_Avvio.py", line 114, in <module>
main()
File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/usr/lib/python3.6/runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "/usr/lib/python3.6/runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
Tuttavia la definizione esiste:

def main():
		Avvio_SuperEnalotto()

	def sceltaMenu(menuCorr, iMax):  
		trattino = "-"
#		self.msgErro=rispo
		for i in iMax:
			print(menuCorr[i])
		print(trattino * 79)
		print()
		Digit = input("digita Numero identificativo del menu da selezionare")
#		iDig = int(input("digita Numero identificativo del menu da selezionare"))
		return Digit

	def vediRispo(self, rispo):  
		self.msgErro=rispo
		os.system('clear')			#  pulisce il terminale Shell
		print(self.msgErro)
		tasto = input("\npremi 'INVIO'")
		sceltaMenu= None

### Programma principale
main()
Mi potete dare una mano?

3 Risposte

  • Re: Vs code come IDE di python

    La vedo arduo aiutarti, il codice postato non è rappresentativo. Così com'è dovrebbe darti un errore sulla indentazione al secondo rigo.
    In ogni caso, se lo fai partire da shell hai sempre lo stesso problema?
  • Re: Vs code come IDE di python

    SuperQWE ha scritto:


    La vedo arduo aiutarti, il codice postato non è rappresentativo. Così com'è dovrebbe darti un errore sulla indentazione al secondo rigo.
    In ogni caso, se lo fai partire da shell hai sempre lo stesso problema?
    Ho provato da linea di comando e questo è il risultato:
    
    $ python SupEna_Avvio.py
      File "SupEna_Avvio.py", line 88
        def main():
                  ^
    IndentationError: unindent does not match any outer indentation level
    
    Il file riportato nel post iniziale è un estratto. Ho agito così per ridurre il volume dell'allegato, ma capisco che mi sono sbagliato. Lo riporto, pertanto, tutto:
    
    """
    Programma: SuperEnalotto
    Autore: Pietro Catania
    data inizio: 11-lug-2019
    data ultima modifica: 13-lug-2019
    Il programma ha lo sopo di seguire le giocate ed i numeri vincenti del concorso a premi
    * supeEnalotto *
    """
    
    import os			# contiene molte funzioni per manipolare percorsi di file e directory.
    import platform 	# identifica la piattaforma di SO. corrente
    import pwd 			# permette di leggere le informazioni utente dal database delle password Unix 
    import sys      	# Parametri e funzioni specifiche per il sistema
    import string   	# definisce costanti e funzioni sulle stringhe
    
    # From SupEna_NuovaGiocata import NuovaGiocata
    # From SupEna_Estrazioni import Estrazioni
    # From SupEna_NumUsciti import UsciteConcorso
    # From SupEna_NumUsciti import ElencoUscite
    # From SupEna_RiepVincite import RiepilVincite
    # From SupEna_Util import CarNriGiocabili
    # From SupEna_Util import ModifNuGiocabili
    
    class Avvio_SuperEnalotto():
        def __init__(self):
    		menu = ("1 - Fine", "2 - Inserimento Dati", "3 - Uscite Numeri miei", "4 - Utilita'")
    		sotMenu2 = ("1 - Nuova Giocata", "2 - Estrazione Numeri")
    		sotMenu3 = ("1 - Concorso Singolo", "2 - Elenco Uscite", "3 - Riepilogo Vincite")
    		sotMenu4 = ("1 - Caricamento iniz. Numeri Giocabili", "2 - Modifica Numeri Giocabili")
    		bScelta = False
    		indMenu = 0
    		while indMenu != 1:
    			while bScelta == False:
    				if indMenu == 0:
    					menuCorr = menu
    					iMax = 4
    				elif indMenu == 2:
    					menuCorr = sotMenu2
    					iMax = 2
    				elif indMenu == 3:
    					menuCorr = sotMenu3
    					iMax = 3
    				else:
    					menuCorr = sotMenu4
    					iMax = 2
    				rispo = sceltaMenu(menuCorr, iMax)
    				if rispo > 0 and rispo <= iMax:
    					if indMenu == 0:
    						menuSel = str(rispo)
    					else:
    						menuSel + str(rispo)
    					if len(menuSel)  == 2:
    						if menuSel == "21":
    							rispo = menuSel + " - Nuova Giocata: gestione NON ANCORA DISPONIBILE"
    							self.vediRispo(rispo)
    #							  vai = NuovaGiocata()
    						elif menuSel == "22":
    							rispo = menuSel + " - Estrazioni: gestione NON ANCORA DISPONIBILE"
    							self.vediRispo(rispo)
    #							  vai = Estrazioni()
    						elif menuSel == "31":
    							rispo = menuSel + " - Uscite per singolo Concorso: gestione NON ANCORA 	DISPONIBILE"
    							self.vediRispo(rispo)
    #							  vai = UsciteConcorso()
    						elif menuSel == "32":
    							rispo = menuSel + " - Elenco Uscite: gestione NON ANCORA DISPONIBILE"
    							self.vediRispo(rispo)
    #							vai = ElencoUscite()
    						elif menuSel == "33":
    							rispo = menuSel + " - Riepilogo Vincite: gestione NON ANCORA DISPONIBILE"
    							self.vediRispo(rispo)
    #							vai = RiepilVincite()
    						elif menuSel == "41":
    							rispo = menuSel + " - Caricamento Numeri Giocabili: gestione NON ANCORA DISPONIBILE"
    							self.vediRispo(rispo)
    #							vai = CarNriGiocabili()
    						else:
    							rispo = menuSel + " - Modifica Numeri Giocabili: gestione NON ANCORA DISPONIBILE"
    							self.vediRispo(rispo)
    #							vai = ModifNuGiocabili()
    						bScelta = True
    				else:
    			  		print ("Scelta errata - Ripeti")
    #					print("^(L)")		# corrisponde alla pressione della combinazione di tasti CTRL+L
    #					os.system ('clear')  # pulisce lo schermo
    		print("Fine lavoro")
    		
    	def main():
            Avvio_SuperEnalotto()
    
    	def sceltaMenu(menuCorr, iMax):
    		trattino = "-"
    #		self.msgErro=rispo
    		for i in iMax:
    			print(menuCorr[i])
    		print(trattino * 79)
    		print()
    		Digit = input("digita Numero identificativo del menu da selezionare")
    #		iDig = int(input("digita Numero identificativo del menu da selezionare"))
    		return Digit
    
    	def vediRispo(self, rispo):  
    		self.msgErro=rispo
    		os.system('clear')			#  pulisce il terminale Shell
    		print(self.msgErro)
    		tasto = input("\npremi 'INVIO'")
    		sceltaMenu= None
    
    ### Programma principale
    # print "-------- Avvio programma --------"
    #if __name__ == "__main__":
    #    Avvio_SuperEnalotto()
    # print("Fine lavoro")
    main()
    
    Non capisco. L'allineamento del codice riprtato nel codificato qui sopra à diverso da quello che vedo io, sia in Vs Code che da comune Editor di testo:
  • Re: Vs code come IDE di python

    Il messaggio di errore è esplicativo: c'è un errore di indentazione che poi è anche il motivo per cui main() non risulta definito e l'allineamento del codice quando lo posti è incoerente con quello che vedi nel tuo editor.
    1: per indentare utilizzi sia spazi che tab. Sul tuo editor il tab prende 4 spazi, sul forum 8. Utilizzare spazi e tab per indentare può essere fonte di tanti tanti tanti problemi. O usi solo spazi, o meglio ancora usi solo tab.
    2: main() l'hai definito in Avvio_SuperEnalotto(), ecco perché risulta indefinito.
Devi accedere o registrarti per scrivere nel forum
3 risposte