Python 尝试将输入字符串转换为浮点时引发意外异常

Python 尝试将输入字符串转换为浮点时引发意外异常,python,exception,Python,Exception,如果输入是字符串,我想让用户输入一个值,然后打印它的长度。如果用户的输入是整数或十进制,我想分别打印“对不起,整数没有长度”或“对不起,浮点没有长度” 我在尝试将输入转换为浮点或整数时使用exception 这是我的密码: c=input("enter a string: ") def length(c): return len(c) try: float(c) if float(c)==int(c): print("Sorry integers do

如果输入是字符串,我想让用户输入一个值,然后打印它的长度。如果用户的输入是整数或十进制,我想分别打印
“对不起,整数没有长度”
“对不起,浮点没有长度”

我在尝试将输入转换为浮点或整数时使用exception

这是我的密码:

c=input("enter a string: ")

def length(c):
    return len(c)

try:
    float(c)
    if float(c)==int(c):
        print("Sorry integers don't have length")
    else:
        print("Sorry floats don't have length")
except:
    print(length(c))
输出结果如下:

>输入一个字符串:sfkelkrelte
11
>输入一个字符串:21
抱歉,整数没有长度
>输入一个字符串:21.1
4.
当我输入一个整数时,错误消息会正确显示,因为转换float()是可能的。但是,对于浮点数,解释器将转到除块之外的
,尽管它应该执行
try


为什么会发生这种情况?

引发异常的部分是
int(c)

一个小小的改变就可以解决这个问题:

c="21.1"

try:
    float(c)
    if "." not in c: #<---- check if "." is in the string c AFTER conversion to float
        print("Sorry integers don't have length")
    else:
        print("Sorry floats don't have length")
except:
    print(len(c))
# Sorry floats don't have length

对于将来的调试,您可以始终将结果输入到字符串格式,以便将字符串转换为浮点,然后检查它是否为整数。将代码更改为:

old: if float(c) ==int(c):

new: if c.isdigit():
更新:

enter a string: 21.0
Sorry floats don't have length

另外,为什么不将EAFP原则()也应用于第二个条件呢

s = input("Input: ")
try:
    float(s)
    try:
        int(s)
        print("Sorry, you have entered an integer.")
    except:
        print("Sorry, you have entered a float.")
except:
    print(len(s))

我忽略了检查
ValueError
作为例外,因为您在代码中也没有检查它。但是,您应该查看一下

错误是
int(c)
c=“21.1”
我仍然没有得到
如果float(c)==int(c):
业务时引发异常。如果他们无论如何都要拒绝浮点和整数,只需测试
float
?似乎他们希望
int
s与
float
s使用不同的打印语句。可能是作业。在您的代码中,如果给定的输入为“21.0”,则会显示“对不起,整数没有长度”行。是,因为
float(“21.0”)==int(21.0)
。我已经更新了@laxmanprasad您的代码运行良好。但是我没有得到内部异常块的逻辑。例如,如果输入为“21.0”,则int(21.0)不会引发异常。那么为什么它仍然执行except块而不是try块呢?如果输入为21.0,“float(21.0)=int(float(21.0))”将计算为true。所以,根据你们的代码,小数部分为0的十进制数将被视为整数。我更新了我的答案。无论是否浮动,try-except块都将捕获。然后isdigit()将捕获是否为整数。
enter a string: 21.0
Sorry floats don't have length
s = input("Input: ")
try:
    float(s)
    try:
        int(s)
        print("Sorry, you have entered an integer.")
    except:
        print("Sorry, you have entered a float.")
except:
    print(len(s))