A occhio il return mi sembra che sia dentro al ciclo while, in questo caso il break conclude il ciclo e poi manca il return e la funzione quindi ritorna True. Se invece l’inserimento fallisce, viene eseguita la print, ma n è fallita e anche qui il return n dovrebbe causare un errore. Io la funzione la scriverei più compatta come segue.
def Numero(s): While True: try: return int(input(s)) except Exception as e: print(“error: ”+str(e)) Mi pare si legga meglio e sia meno soggetta ad errori > Il giorno 31 gen 2020, alle ore 14:41, Gabriele Battaglia <iz4...@libero.it> > ha scritto: > > Ciao. > Sono recentemente passato a Python 3.8.1 > Ho un comportamento che non mi spiego. > Assegno un valore numerico ad una variabile tramite una piccola funzione che > si assicura che l'utente inserisca numeri e non lettere: > > def Numero(s): > while True: > try: > n = int(input(s)) > break > except: > print("Sono accettati esclusivamente valori numerici!") > return (n) > > i1 = Numero("Da: ") > > Bene, fin qui dovrebbe essere elemntare. Poi ho bisogno di sottrare una unità > ad i1: > > i1 -= 1 > > E ricevo un errore. L'interprete mi informa che l'operatore -= non può essere > usato sulla classe None ma solo sugli interi. > Ho inserito un print(type(i1)) prima dell'errore ed in effetti appartiene > alla classe None. > Ma com'è possibile? > > Gabry. > -- > Gabriele Battaglia, IZ4APU (Libero) > Sent from TB on Windows 10, Genus Bononiae's computer. > _______________________________________________ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python _______________________________________________ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python