вывести выписку снаружи, кроме блока - PullRequest
1 голос
/ 03 мая 2020
import sys
lst = ['b', 0, 2,5]
for entry in lst:
  try:
    print("****************************")
    print("The entry is", entry)
    r = 1 / int(entry)
  except(ValueError):
    print("This is a ValueError.")
  except(ZeroDivisionError):
    print("This is a ZeroError.")
  except:
    print("Some other error")
print("The reciprocal of", entry, "is", r)

Оператор печати снаружи, за исключением блока, пропускается, когда программа принимает входные данные как 2. Но если я даю только 3 элемента в списке, все работает нормально.

Ответы [ 3 ]

2 голосов
/ 03 мая 2020

Поскольку ваш print находится за пределами for l oop, он выполняется только после последней итерации l oop, то есть для значения 5. Вам нужно перенести его в l oop, но поместить в предложение else для try, чтобы оно выполнялось только в том случае, если исключение не происходит:

import sys
lst = ['b', 0, 2,5]
for entry in lst:
  try:
    print("****************************")
    print("The entry is", entry)
    r = 1 / int(entry)
  except(ValueError):
    print("This is a ValueError.")
  except(ZeroDivisionError):
    print("This is a ZeroError.")
  except:
    print("Some other error")
  else:
    print("The reciprocal of", entry, "is", r)

Вывод:

****************************
The entry is b
This is a ValueError.
****************************
The entry is 0
This is a ZeroError.
****************************
The entry is 2
The reciprocal of 2 is 0.5
****************************
The entry is 5
The reciprocal of 5 is 0.2
2 голосов
/ 03 мая 2020

Это потому, что оператор print находится за пределами для l oop. Таким образом, он печатает только для последней итерации entry.

Проверьте это:

In [1340]: import sys 
      ...: lst = ['b'] 
      ...: for entry in lst: 
      ...:   try: 
      ...:     print("****************************") 
      ...:     print("The entry is", entry) 
      ...:     r = 1 / int(entry) 
      ...:   except(ValueError): 
      ...:     print("This is a ValueError.") 
      ...:   except(ZeroDivisionError): 
      ...:     print("This is a ZeroError.") 
      ...:   except: 
      ...:     print("Some other error") 
      ...: print("The reciprocal of", entry, "is", r)
****************************
The entry is b
This is a ValueError.
The reciprocal of b is 0.2

Если вы хотите, чтобы он печатал для каждого элемента, pu sh печать внутри для л oop:

In [1344]: import sys 
      ...: lst = ['b',0,2,5] 
      ...: for entry in lst: 
      ...:   try: 
      ...:     print("****************************") 
      ...:     print("The entry is", entry) 
      ...:     r = 1 / int(entry) 
      ...:   except(ValueError): 
      ...:     print("This is a ValueError.") 
      ...:   except(ZeroDivisionError): 
      ...:     print("This is a ZeroError.") 
      ...:   except: 
      ...:     print("Some other error") 
      ...:   else: 
      ...:     print("The reciprocal of", entry, "is", r) 
      ...:                                                                                                                                                                                                  
****************************
The entry is b
This is a ValueError.
****************************
The entry is 0
This is a ZeroError.
****************************
The entry is 2
The reciprocal of 2 is 0.5
****************************
The entry is 5
The reciprocal of 5 is 0.2
1 голос
/ 03 мая 2020
lst = ['b', 0, 2, 5]
for entry in lst:
  try:
    print("****************************")
    print("The entry is", entry)
    r = 1 / int(entry)
    print("The reciprocal of", entry, "is", r)
  except(ValueError):
    print("This is a ValueError.")
  except(ZeroDivisionError):
    print("This is a ZeroError.")
  except:
    print("Some other error")

Оператор печати должен быть внутри блока try

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...