Python异常/值错误/错误处理
我有一个输入(称为Python异常/值错误/错误处理,python,Python,我有一个输入(称为名称),该输入被分成三部分(.split),然后第三个(最后一个)元素被转换成整数并放入列表中 i、 例如names=“John Smith 3” 它分为三部分“John”“Smith”3 并放入一个列表:list1=[“John”,“Smith”,3] 现在我的问题是,如果第三个元素是作为字符串输入的,并且不能转换为和整数(“John Smith Three”),我如何显示错误并让用户重新输入(名称),以及如果用户输入“John Jacob Smith 3”(三个以上的元素)
名称
),该输入被分成三部分(.split
),然后第三个(最后一个)元素被转换成整数并放入列表中
i、 例如names=“John Smith 3”
它分为三部分“John”“Smith”3
并放入一个列表:list1=[“John”,“Smith”,3]
现在我的问题是,如果第三个元素是作为字符串输入的,并且不能转换为和整数(
“John Smith Three”
),我如何显示错误并让用户重新输入(名称),以及如果用户输入“John Jacob Smith 3”
(三个以上的元素),我如何处理错误第一部分:一个简单的方法是:
try:
float(l[2])
except ValueError:
#error - bad input. user must re enter...
对于第二部分:只需检查拆分后形成的列表的长度。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值结尾。因此
'ab10'
和'ab10'
都是匹配的。我建议您向用户询问两个输入:首先是他的/她的名字,然后是魔法数字
如果你确实想从一个输入中得到这个,你可以这样尝试
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
我更喜欢在任何事情上使用函数:
def processNames(nameString):
namesList = nameString.split()
if len(namesList) == 3:
try:
namesList[2] = int(namesList[2])
except:
print "Third item not an integer"
return None
else:
print "Invalid input"
return None
return namesList
假设你有一长串的名字要循环:
processed = []
for name in longList:
processed.append(processNames(name))
它将优雅地返回一个项目列表,其中不正确的条目中填充了“无”。到目前为止,您的代码是什么?不要忘记索引器:),我认为您的代码不会引发TypeError。谢谢,对吧:)强制转换为int会导致参数None出现TypeError,但这里永远不会出现这种情况。空白的except子句是个坏主意。您应该明确捕获哪个异常。