4

有没有办法从用户输入中检查它是什么类型?并做这样的事情:

if input == str:
   do this
elif input == int:
   do this
else:
   do this
4

5 回答 5

5

你可以用它isinstance来检查某物的类型——但你真的可能不想这样做......

这也很大程度上取决于您如何从用户那里获得输入。如果您正在使用raw_input,那么它始终是一个字符串,您需要将try其转换为您想要的任何类型:

try:
   x = int(input):
except ValueError:
   try:
       x = float(input):
   except ValueError:
       print "No recognizable type!"

python 的一个基本原理是鸭式打字。如果一个物体看起来像鸭子,听起来像鸭子,闻起来像鸭子,那么它就是鸭子(前提是您只关心物体的外观、气味和声音)。最终,在 python 中,最好try看看它是否是“鸭子”。如果它不是鸭子,那么您捕获异常并处理它(如果您知道如何)。这是你没有看到人们isinstance在他们的代码中使用太多的主要原因,也是我警告不要使用它的原因。

于 2013-02-12T17:54:05.973 回答
1

如果您的意思是键盘输入,那么所有输入都是一个字符串。即使用户输入像“88”这样的数字,结果也将是字符串"88"而不是整数88。但是,您可以使用此模式来判断字符串是否包含数字而不包含其他内容:

if input.isdigit():
    print "input is a number"
else:
    print "input is not a number"

更好的方法是将输入转换为一个数字,它将处理注释中提到的“50.0”或“-10”之类的输入(如果小数有效,则使用 float() 或 Decimal() 而不是 int() 这里):

try:
    number = int(input)
except ValueError:
    print "input is not a number"

如果您不是指键盘输入,那么有多种方法可以检查类型,但通常最好的办法是简单地使用输入,就好像它是有效的一样,并捕获如果它无效就会出现的异常。这样,您可以根据对象的实际方法和属性定义输入要求,而不仅仅是其名义类(这是“鸭子类型”)。

于 2013-02-12T17:55:30.700 回答
1

您可以使用isinstance http://docs.python.org/2/library/functions.html#isinstance

例子

isinstance('hello', str)

返回

于 2013-02-12T17:55:35.637 回答
0

我想你正在寻找isinstance.


你打败了我,但我的有一个链接:

http://docs.python.org/2/library/functions.html#isinstance


顺便说一句,我一直在测试 PyCharm IDE,如果你assert isinstance()在你的代码中,他们会自动为你做类型检查,然后它会自动完成。它还允许您在文档字符串中指定类型参数。然后,它使用此类型的信息来帮助您在路上自动完成。很方便...

于 2013-02-12T17:54:13.600 回答
0

isinstance(input, type)

type内置函数也可以做同样的事情,但isinstance()建议使用内置函数来测试对象的类型。

于 2013-02-12T17:57:37.287 回答