Исключения не обрабатываются правильно - PullRequest
0 голосов
/ 14 октября 2019

enter image description here

Кажется, что моя обработка исключений работает неправильно. Когда я ввожу строку в качестве ввода, правильное исключение не появляется. Когда я ввожу отрицательное число, у меня та же проблема. Кто-нибудь знает, как это исправить?

Я пытался изменить условия, которые вызывают исключения, но все еще не нашел решения проблемы.

def main():
    try:
        height = int(input())
        check_height = type(height)
        if height == 0 or height > 999:
            raise Exception
        elif check_height != int:
            raise TypeError
        elif height < 0:
            raise ValueError
        else:
            for blocks in range(height):
                if blocks == 0:
                    print ("+-+")
                    print ("| |")
                    print ("+-+", end = "")
                else:
                    print ("-+")
                    for num in range(blocks):
                        print("  ", end = "")
                    print ("| |")
                    for num in range(blocks):
                        print("  ", end = "")
                    print ("+-+", end = "")
            print("\n")

    except Exception:
        print("Value can't be equal to 0 or greater than 999")
    except TypeError:
        print("Value is not an integer")
    except ValueError:
        print("Value is less than 0")
    finally:
        pass

main()

Ожидаемый результат должен бытьблок, который выглядит следующим образом, если введенный ввод был 1: (см. скриншот вывода выше)

1 Ответ

1 голос
/ 14 октября 2019

В вашей обработке исключений возникли проблемы. Так как вы пытаетесь преобразовать сам ввод в целое число, оно бросило бы ValueError прямо здесь, если вход не может быть преобразован в целое число. И у вас не было никакой обработки исключений ValueError, так что она собиралась в блок исключений по умолчанию. Попробуйте так:

try:
    height = int(input())
    # check_height = type(height)
    if height <= 0 or height > 999:
        raise Exception
    # elif check_height != int:
    #     raise TypeError
    # elif height < 0:
    #    raise ValueError
    else:
        for blocks in range(height):
            if blocks == 0:
                print ("+-+")
                print ("| |")
                print ("+-+", end = "")
            else:
                print ("-+")
                for num in range(blocks):
                    print("  ", end = "")
                print ("| |")
                for num in range(blocks):
                    print("  ", end = "")
                print ("+-+", end = "")
        print("\n")
except ValueError:
    print("Value is not an integer")
# except TypeError:
#     print("Value is not an integer")
except Exception:
    print("Value can't be less than 1 or greater than 999")
finally:
    pass
...