为了账号安全,请及时绑定邮箱和手机立即绑定

Python异常/ ValueError /错误处理

Python异常/ ValueError /错误处理

函数式编程 2021-03-29 09:49:19
我有一个输入(称为names),该输入被分为三部分(.split),然后将第三个(最后一个)元素转换为整数并放入列表中即,例如names = "John Smith 3" ,将其分为三部分"John" "Smith" 3 并放入列表中:list1 = ["John", "Smith", 3]现在我的问题是,第三个元素是否作为字符串输入并且不能转换为整数("John Smith Three"),如何显示错误并重新输入用户名(名称),以及如何处理错误如果用户输入"John Jacob Smith 3"(三个以上的元素)。
查看完整描述

3 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

我建议您要求用户输入两个信息:首先输入他/她的名字,然后输入幻数。


如果您确实想从单个输入中获取此信息,则可以这样尝试


while True:

    name_and_num = raw_input("Your input: ")

    parts = name_and_num.split()

    try:

        firstname, lastname, num = parts[0], parts[1], int(parts[2])

        break

    except (IndexError, ValueError):

        print "Invalid input, please try again"


print firstname, lastname, num


查看完整回答
反对 回复 2021-04-02
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

2种解决方法:


这种古老的经典尝试捕获方法:


message = 'Please enter ...'

while(True):

    print message

    user_input = raw_input().split()

    if len(user_input) != 3:

        message = 'Incorrect number of arguments please try again'

        continue

    try:

        num_value = int(user_input[2])

    except ValueError:

        message = 'Incorrect int value'

        continue

    break

另一种方法是仅使用正则表达式,它应如下所示:


import re    

regex = '^\s*(\w+)\s+(\w+)\s+(\d+)\s*$'

p = re.compile(regex)

print 'Please enter ...'

while(True):

    user_input = raw_input()

    m = p.match(user_input)

    if m:

        value1 = m.group(1)

        value2 = m.group(2)

        int_value = int(m.group(3))

        break

    else:

        print 'Incorrect input format, it should be ...'

并不是使用此正则表达式,您就可以匹配具有3个元素(由任意数量的空格分隔并以int值结尾)的任何字符串。所以'a b 10'和' a  b     10 '都匹配。


查看完整回答
反对 回复 2021-04-02
?
交互式爱情

TA贡献1712条经验 获得超3个赞

对于第一部分:一种简单的方法是:


try:

    float(l[2])

except ValueError:

    #error - bad input. user must re enter...

对于第二部分:只需检查由拆分形成的列表的长度。


查看完整回答
反对 回复 2021-04-02
  • 3 回答
  • 0 关注
  • 455 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信