проверка строки с помощью try, кроме как в python

Я пытался заставить этот фрагмент кода работать:

    last_bits_repeat= "yes"
    while last_bits_repeat== "yes":
        try:
            another_number_repeat= input("do you have another number to add??")
            another_number_repeat= str(another_number_repeat)
        except TypeError as e:
            if not repeat:
                print("You left this empty, please write something!")   
                last_bits_repeat= "yes"
            else:
                print("This is not empty, but invalid")

Это не работает, и я думаю, что это из-за TypeError.

Мой вопрос: какое исключение я должен использовать для проверки строки? Пользователь должен ввести либо «да», либо «нет».


person gbdcal1    schedule 12.07.2015    source источник
comment
Это Python 3.x?   -  person Anand S Kumar    schedule 12.07.2015
comment
По крайней мере, этот код содержит неправильный отступ.   -  person d33tah    schedule 12.07.2015
comment
проверьте это: stackoverflow.com/questions/28486058/   -  person Ronen Ness    schedule 12.07.2015
comment
Как вы думаете, почему вообще возникнет исключение? Когда вы запускаете это без try/except, вы видите его? Который?   -  person Daniel Roseman    schedule 12.07.2015
comment
Связано: stackoverflow.com/questions/16635073/   -  person NightShadeQueen    schedule 12.07.2015


Ответы (2)


Это не работает, и я думаю, что это из-за TypeError.

Если это python2 (с from __future__ import print_function), он не работает, потому что input не делает того, что вы от него ожидаете, а именно не присваивает введенное значение переменной another_number_repeat Используйте raw_input вместо этого.

В python3 ввод работает нормально, но не вызывает исключения.

Мой вопрос: какое исключение я должен использовать для проверки строки? (another_number_repeat), если вообще смогу.

Вам не нужно исключение. Попробуй это:

def get_choice(prompt, choices):
    valid = False
    while not valid:
        answer = raw_input(prompt).strip()
        valid = answer in choices
    return answer

answer = get_choice('do you have another number to add?', ['yes', 'no'])

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

Если вы хотите использовать один и тот же код для произвольного ввода (чисел, текста, выбора), регулярное выражение поможет избежать громоздкой проверки исключений и сделает код более гладким:

import re
def get_input(prompt, regexp, convert=str):
    valid = False
    while not valid:
        answer = raw_input(prompt).strip()
        valid = re.match(regexp, answer)
    return convert(answer)

get_input('add a number? (yes or no)', r'(yes)|(no)')
get_input('number?', r'^[0-9]*$', int)
person miraculixx    schedule 12.07.2015
comment
Это python3 — обратите внимание на print() — так что input правильно - person NightShadeQueen; 12.07.2015
comment
@NightShadeQueen, если это был python3, зачем использовать что-то вроде str(another_number_repeat)? - person miraculixx; 12.07.2015
comment
Потому что он или она в замешательстве. С другой стороны, он или она не получает синтаксическую ошибку, что означает, что print(), скорее всего, правильный. - person NightShadeQueen; 12.07.2015
comment
Вы также не получите синтаксическую ошибку для print("You left this empty, please write something!") в Python 2. Хотя я предполагаю, что вы правы, код может быть Python 3. - person Anand S Kumar; 12.07.2015
comment
Это python 3, я использовал str(another_number_repeat) просто потому, что моя предыдущая проверка (которая проверяла целое число) не работала, когда я делал new_number= int(input("give me a number"), но работал, когда я делал new_number= input("Give me a number"), а затем new_number= int(new_number). Извините за путаницу! - person gbdcal1; 12.07.2015
comment
@DarrenO'Callaghan: input Python3 уже дает вам строку. Приведение строки к строке никогда не приведет к ошибке. - person NightShadeQueen; 12.07.2015

Что я обычно делаю в этих исключениях «выяснения» проблем:

  1. Удалите всю попытку: кроме: пункта
  2. Запустите скрипт и создайте неверные данные
  3. Посмотрите сообщение об ошибке, в котором будет напечатано имя исключения. Если вы ожидаете несколько типов ошибок, запустите тестовый пример для каждого тестового примера: --пустая запись (где пользователь нажимает ) --Пользователь вводит восьмеричный код и т. д.
  4. Воссоздайте попытку: за исключением: , указав имена исключений из шага № 3.

Пример кода для определения кода исключения:

    last_bits_repeat= "yes"
    while last_bits_repeat== "yes":

            another_number_repeat= input("do you have another number to add??")
            another_number_repeat= str(another_number_repeat)
person Fragtzack    schedule 12.07.2015