尝试在Python中创建一个只接受1到5之间的数字而不接受字符串的函数

尝试在Python中创建一个只接受1到5之间的数字而不接受字符串的函数,python,function,validation,Python,Function,Validation,我正在创建一个函数,从一个问题接收一个介于1和5之间的数字(likert标度)。当用户输入错误的INT my loop is ok时,问题会重复。但是如果用户也输入了字符串,我想重复这个问题。但在这种情况下,程序会崩溃“ValueError:invalid literal for int(),以10为基数” def likert(msg): 尽管如此: L=int(输入(味精)) 如果1在检查其类型之前将L强制转换为int。所以当L是一个字符串时,你的程序试图将它转换为int,结果它崩溃了。只有

我正在创建一个函数,从一个问题接收一个介于1和5之间的数字(likert标度)。当用户输入错误的INT my loop is ok时,问题会重复。但是如果用户也输入了字符串,我想重复这个问题。但在这种情况下,程序会崩溃“ValueError:invalid literal for int(),以10为基数”

def likert(msg):
尽管如此:
L=int(输入(味精))

如果1在检查其类型之前将L强制转换为int。所以当L是一个字符串时,你的程序试图将它转换为int,结果它崩溃了。只有在确定L不是字符串时,才应该执行数字运算。解决方案是使用try-and-catch或使用if语句处理它。

int()
总是返回一个整数,因此
type(L)=int
总是为真。如果用户键入的内容不是有效的整数,
int()
将发出错误信号

如果用户输入的不是整数,请使用
try/except
处理错误

def likert(msg):
    while True:
        try:
            L = int(input(msg))
        except ValueError:
            print('\033[031mError  [1 to 5] only\033[m')
            continue

        if 1 <= L <= 5:
            return L
        else:
            print('\033[031mError  [1 to 5] only\033[m')
def likert(msg):
尽管如此:
尝试:
L=int(输入(味精))
除值错误外:
打印('\033[031mError[1到5]仅\033[m')
持续

如果1不立即尝试将输入抽象为
int
,请执行以下操作:

def likert():

    while True:
        L = input()

        if L.isalpha:
            #if input is string
            print('\033[031mError  [1 to 5] only\033[m')
            continue
        elif L.isdigit:
            #if input is int
            if 1 <= L <= 5:
                #if input is within range
                return L
            else:
                #if input is out of range
                print('\033[031mError  [1 to 5] only\033[m')
                continue
def likert():
尽管如此:
L=输入()
如果L.isalpha:
#如果输入是字符串
打印('\033[031mError[1到5]仅\033[m')
持续
elif L.isdigit:
#如果输入为int

如果我使用
try:…except ValueError:…
捕获异常并处理它。谢谢!我正在观看youtube教程,他们中还没有人了解这一部分(try/except),但它确实有帮助!这是一个相对高级的主题,你不太可能在初学者教程中看到它。
def likert():

    while True:
        L = input()

        if L.isalpha:
            #if input is string
            print('\033[031mError  [1 to 5] only\033[m')
            continue
        elif L.isdigit:
            #if input is int
            if 1 <= L <= 5:
                #if input is within range
                return L
            else:
                #if input is out of range
                print('\033[031mError  [1 to 5] only\033[m')
                continue