如何自动确定用户输入的类型?

How to automatically determine type for user input?

我想制作一个简单的数学函数,接受用户输入,但允许用户不输入 integer/float。我很快了解到 Python 默认情况下不识别类型。快速 Google 搜索显示使用 literal_eval,但如果输入字符串,则显示 returns 和 ValueError: malformed string。这是我目前所拥有的:

from ast import literal_eval

def distance_from_zero(x):
  if type(x) == int or type(x) == float:
    return abs(x)
  else:
    return "Not possible"

x = literal_eval(raw_input("Please try to enter a number "))

print distance_from_zero(x)

正如您提到的那样,如果您得到 ast.literal_eval('c1') 这样的输入,您将收到格式错误的字符串错误 (ValueError)。如果您执行类似 ast.literal_eval('1c') 的操作,您还将获得 SyntaxError。您将需要获取输入数据,然后将其传递给 literal_eval。然后您可以捕获这两个异常,然后 return 您的 'Not Possible'.

from ast import literal_eval

def distance_from_zero(x):
    try:
        return abs(literal_eval(x))
    except (SyntaxError, ValueError):
        return 'Not possible'

    x = raw_input("Please try to enter a number ")

    print distance_from_zero(x)

如果您阅读了 literal_eval 文档,只需回答为什么会发生 ValueError: malformed string 的问题:

Safely evaluate an expression node or a string containing a Python expression. The string or node provided may only consist of the following Python literal structures: strings, numbers, tuples, lists, dicts, booleans, and None.

所以字符串应该用 "" 括起来,就像在编辑器中写的一样 s = "string" raw_input 接受输入并转换为字符串数据类型所以我已经尝试过这个并且能够使用 literal_eval

进行转换
>>> x=raw_input()
string
>>> x= "\""+x+"\"" # concatenating the "" to string
>>> literal_eval(x)
'string'
>>>