从字符串中拆分的数字不是数字

时间:2016-02-19 11:36:39

标签: python python-2.7

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不是。

5 个答案:

答案 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'