duration = inputScriptLine.split(' ', 1)[1]
if type(duration) == str:
print ' Error: Sleep duration "' + duration + '" is not numeric'
给定SLEEP 50
,我得到Error: Sleep duration "50" is not numeric
我不太关心为什么,我只是想知道如何编码,以便SLEEP 50
有效且SLEEP APNOEA
不是。
答案 0 :(得分:5)
使用isdigit():
if not duration.isdigit():
print 'Error: Sleep duration "' + duration + '" is not numeric'
它会检查duration
中的所有字符是否都是数字。
答案 1 :(得分:3)
如果你想接受的不仅仅是整数,你应该转为浮动:
def is_numeric(s):
try:
float(s)
return True
except ValueError:
return False
duration = inputScriptLine.split(' ', 1)[1]
if not is_numeric(duration):
print(' Error: Sleep duration {} is not numeric'.format())
float("1.0")
,float("1")
,float("1.5")
等..都将返回True,但int(“1.0”),int("1.5")
等...也会返回False,如果你实际上是在寻找数字输入是错误的。
如果您想确保获得正数,请在投射后存储结果并返回f > 0
:
def is_positive_numeric(s):
try:
f = float(s)
return f > 0
except ValueError:
return False
答案 2 :(得分:2)
try:
duration = int(duration)
except:
pass
这将尝试将其转换为int,如果它不是数字,它将失败并保持字符串。
DeveloperXY的解决方案更简洁,但如果您希望稍后将该值用作int,我的解决方案很有用。
答案 3 :(得分:1)
您正在检查输入是否为字符串。它将是 - 您刚刚在字符串上使用split
命令。
您需要检查字符串是否仅包含.isdigit()
的数字字符。
请注意,这不会接受负输入,但您不需要这些,因为这是时间。
所以你的新代码是:
duration = inputScriptLine.split(' ', 1)[1]
if not duration.isdigit():
print 'Error: Sleep duration "' + duration + '" is not numeric'
答案 4 :(得分:1)
duration = inputScriptLine.split(' ', 1)[1]
try:
duration = int(duration)
except ValueError:
print ' Error: Sleep duration "' + duration + '" is not numeric'