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

Rispondere a