J'essaie d'écrire un petit bloc de code où je prends une entrée (l'utilisateur peut entrer toute entrée dans des mots ou des lettres), mon code devrait essayer de trouver s'il s'agit d'un nombre positif ou négatif ou la valeur entrée est une chaîne.
4 Réponses :
La raison est que l'exception est causée dans Int (entrée (...)) afin que la STR1 reste non déclarée.
str1=input('Enter a number:') try: str1=int(str1) print('try block is completed') except: str1=str(str1) if str1>0: print('entered value is positive') elif str1<0: print('entered value is negative') else: print(str1)
Si vous trouvez cette réponse utile, veuillez la marquer comme réponse acceptée, avec la marque de coche à gauche. Merci.
AVIS: Saisie d'une chaîne suivra avec un typeError pour comparer STR code> à
int code>
Je viens de modifier son code. Cette exception peut être traitée dans le bloc sauf de toute façon.
Dans l'affaire FN Une exception dans l'appel Aussi - dans le cas d'une exception, vous obtenez un TypeError pour tenter de comparer une chaîne avec 0, alors mettez tout ce que vous avez tout ce que vous supposez la logique à l'intérieur du int code>, la variable
str1 code> ne peut jamais être créée, car
int code> est évalué (et augmente le erreur) avant
STR1 code> est attribué.
Essayez CODE>, comme ceci: P>
str1=input('Enter a number:')
try:
str1=int(str1)
if str1>0:
print('entered value is positive')
elif str1<0:
print('entered value is negative')
except:
str1=str(str1)
print(str1)
Celui-ci est plus valide, il doit la réponse acceptée.
Je m'attendais à ce que cela jette une erreur comme Ival est une variable locale, mais cela fonctionne bien, pourquoi Rawstr = Entrée ("Entrez un nombre") Essayez: IVAL = INT (RAWSTR) Sauf: IVAL = -1 si IVAL> 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: Imprimer («beau travail») d'autre: imprimer ('pas un nombre »)
Non, le bloc d'essai fait pas i> établit une portée et des variables créées à l'intérieur d'un bloc d'essai sont i> disponibles en dehors du bloc. Le problème ici est que l'affectation n'arrive jamais du tout, car il existe une exception tout en évaluant son côté droit.
@ TurePålsson, vous êtes 100% correct. Gopib remarque ma réponse était trompeuse. Vérifiez cet exemple sur: ideone.com/lpehk9
Un bon conseil avec la manipulation des exceptions est le aussi peu possible dans un bloc d'essai, surtout si vous ne spécifiez pas quelles exceptions que vous attrapez.
sur votre branche sauf que vous avez l'appel suivant: puisque vous êtes sur votre sauf, et vous n'avez pas défini votre variable STR1 à l'extérieur de l'essai / à l'exception du bloc, votre déclaration Échec quand il essaie de lancer les contenus de la variable STR1 (qui n'existe pas en dehors de la branche de try)). p> Une implémentation possible pour traiter de cette affaire serait de définir STR1 ou une chaîne vide sur votre bloc sauf. Quelque chose comme ceci: p>
C'est parce que vous utilisez str1 code> dans votre clause sauf. S'il y a une exception lors du traitement de code> entrée code> ou
int code>, la variable
str1 code> n'est jamais définie.
Si vous ajoutez
STR1 = Aucun code> avant votre
ESSAYER CODE> Déclaration, je suis sûr que cela ne vous plaingera plus, mais vous devez modifier votre
sauf code> clause ensuite.
Si vous ne vous inquiétez pas de la distribution to int, vous pouvez faire:
str1= None
try:
str1=input('Enter a number:')
val=int(str1)
print('try block is completed')
except:
val=None
if val is None:
print('input is not a valid number')
elif val>0:
print('entered value is positive')
elif val<0:
print('entered value is negative')
else:
print(str1)
Entrez un numéro: Vingt Traceback (appel le plus récent): Fichier "tryXcept.py", ligne 3, dans str1 = int (entrée ("Entrez un numéro: ')) ValueError: littéral invalide pour INT () avec Base 10: 'Vingt' lors de la manipulation de l'exception ci-dessus, une autre exception s'est produite: Traceback (dernier appel le dernier): Fichier "tryXcept.py", ligne 7, dans str1 = str (str1) nomError: nom 'str1 ' n'est pas défini
Déclarez STR1 avant le bloc d'essai
Mais selon mes connaissances, le code pénètre d'abord dans le bloc d'essai et en cas d'exception / de traçage / erreur, cela va à l'exception de laquelle STR1 est déjà défini?