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

时间:2018-04-27 14:21:47

标签: python python-2.x

我想创建一个简单的数学函数,它接受用户输入,但允许用户不输入整数/浮点数。我很快就学会了Python默认不识别类型。快速Google搜索使用literal_eval显示,但如果输入字符串,则返回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)

2 个答案:

答案 0 :(得分:0)

如果您阅读了literal_eval文档,请回答您的查询原因ValueError: malformed string

  

安全地评估表达式节点或包含Python的字符串   表达。提供的字符串或节点可能只包含   以下Python文字结构:字符串,数字,元组,列表,   dicts,booleans和None。

所以字符串应该用""用于在s = "string"等编辑器中编写 raw_input接受输入并转换为字符串数据类型,所以我试过这个并且能够使用literal_eval进行转换

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

答案 1 :(得分:-1)

正如您所提到的,如果您获得ValueError之类的输入,您将收到格式错误的字符串错误(ast.literal_eval('c1'))。如果您执行SyntaxError之类的操作,也会获得ast.literal_eval('1c')。您将需要获取输入数据,然后将其传递给literal_eval。然后,您可以捕获这两个异常,然后返回'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)