Почему я не могу использовать операторы if, кроме операторов? - PullRequest
0 голосов
/ 22 января 2020

Почему я не могу добавить оператор if в операторах кроме?

Я хочу показать обе формы ошибок такого рода в выводе:

try:
    t = int(input("How time need: "))
except ValueError:
    if type(t) == float:
        print(">>> you should give a int number (you given float) <<<\n")
    elif type(t) == str:
        print(">>> you should give a int number (you given str) <<<\n")

Ответы [ 3 ]

2 голосов
/ 22 января 2020

Я думаю, что ваша проблема не в том, что вы не можете вставить if в except. Код, который вы дали, должен работать очень хорошо. Тем не менее, он не будет делать то, что вы думаете, что он делает. Я подозреваю, что ваш код содержит что-то вроде:

t = input('>>>')

В этом случае t всегда будет строкой. Но если вы скажете

if t == float:
    print(">>> you should give a int number (you given float) <<<\n")
elif t == str:
    print(">>> you should give a int number (you given str) <<<\n")

, это ничего не напечатает. Почему? t не равно строке, это объект строкового типа. Поэтому вместо этого проверьте:

if isinstance(t, float):
    print(">>> you should give a int number (you given float) <<<\n")
elif isinstance(t, str):
    print(">>> you should give a int number (you given str) <<<\n")
1 голос
/ 22 января 2020

Используйте это:

try:
    t = int(input("How time need: "))
except ValueError as e:

    if isinstance(_,float):
        print(">>> you should give a int number (you given float) <<<\n")
    elif isinstance(_,str):
        print(">>> you should give a int number (you given str) <<<\n")

Ошибка возникла до создания t, следовательно, ошибка. Мы знаем, что python хранит последний ввод / ответ в _, поэтому использовали это. :)

1 голос
/ 22 января 2020

Вы можете использовать условные логи c, такие как if операторы в except блоках:

try:
  raise ValueError("asd")
except ValueError as e:
  if someVal == 10:
    print("someval is 10")
  elif someVal == 20:
    print("someval is 10")

Попробуйте здесь

Однако, если вы хотите проверить тип переменной, используйте type:

if type(myVar) == int:
    print("myVar is an integer")

В вашем случае, чтобы проверить, какой тип имеет ваша переменная, что-то в этом направлении будет работать:

#myVar = 10          #comment in the appropiate line
myVar = "a string"

try:
  # some work which might raise a ValueError
  raise ValueError()
except ValueError:
  if type(myVar) == int:
    print("myVar is an int.")
  elif type(myVar) == str:
    print("myVar is a string.")

Еще один (и, возможно, лучший) способ проверить указанный тип c - использовать isinstance. См. Ответ Натана для получения дополнительной информации об этом.

...