将用户输入转换为布尔值并在Python中引发错误?

将用户输入转换为布尔值并在Python中引发错误?,python,validation,boolean,Python,Validation,Boolean,我正在使用Python版本3.7.4。我正在编写一段代码,需要用户以是或否的形式输入,如下所示: isValid = input("Is this a previous version? (y/n)") 我想将这个“是”或“否”问题转换为布尔型回答。我已经看到我有兴趣实施的一种可能性: isValid = False if input("Is this a previous version? (y/n)").lower() == 'n' else True 不过,我还想说明用户是否要提供y或

我正在使用Python版本3.7.4。我正在编写一段代码,需要用户以是或否的形式输入,如下所示:

isValid = input("Is this a previous version? (y/n)")
我想将这个“是”或“否”问题转换为布尔型回答。我已经看到我有兴趣实施的一种可能性:

isValid = False if input("Is this a previous version? (y/n)").lower() == 'n' else True

不过,我还想说明用户是否要提供y或n以外的输入。理想情况下,如果他们提供输入,我想提出一个错误。有人能告诉我如何以简洁的方式实现这样一个布尔变量isValid吗,或者我必须创建另一个方法来检查用户输入吗?先谢谢你。如果需要的话,我可以添加更多细节。

也许可以这样做

isValid = input("Is this a previous version? (y/n)").lower() in ['y', 'n']
# if isValid: ... do whatever else: raise error

你可以做这样的事情,但它很难看,我一点也不推荐:

def raiser(ex): raise ex
my_input = input("Is this a previous version? (y/n)").lower()
isValid = False if my_input == 'n' else True if my_input == 'y' else raiser(Exception)
执行类似操作的最佳方法之一是简单的if/elif/else:


我真的不明白你问的问题,但我看到你的代码中有一个错误,我想你指的就是这个错误

check = False if isvalid.lower() == 'n' else True
isvalid = check 

这有点冗长,但会强制用户输入y或n,并一直询问,直到他们这样做:

isValid = input("Is this a previous version? (y/n)")
try:
    while isValid is not True or False:
        if isValid.lower() == 'y':
            isValid == True
            break
        elif isValid.lower() == 'n':
            isValid == False
            break
        else:
            print("please select y or n")
            isValid = input("Is this a previous version? (y/n)")
except:
    print("Please select a valid response")

获取布尔值和引发异常的单行方法

ans = input('y/n : ').lower(); ans1 = False if ans=='n' else (True if ans=='y' else exec('raise(ValueError)'))

ans1是布尔型答案。

幸好我们不必把所有内容都写在一行中,否则事情会一团糟。比方说,你为什么不写一个if-elif-else语句呢?如果你想把它与反复询问用户直到他们给出有效的回答结合起来,那么一行的想法很快就站不住脚了。编写一个隐藏代码的函数。isValid=询问用户是否有可能重复
ans = input('y/n : ').lower(); ans1 = False if ans=='n' else (True if ans=='y' else exec('raise(ValueError)'))