我想创建一个简单的数学函数,它接受用户输入,但允许用户不输入整数/浮点数。我很快就学会了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)
答案 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)