尝试/除了没有为str()提供错误消息以防止数字

时间:2016-02-01 00:48:23

标签: string python-2.7 try-except

以下镜像用于int()或float(),但它不适用于str()。 我的期望是提出警告信息:'请输入一个字符串',但它没有用。你有什么想法吗?

inp = raw_input("Enter a word") # for instance number =123
try :
    i = str(inp)

except :

    print 'Please enter a str'

建议:

Wroking:否

inp=raw_input("enter a string")
if not isintance(inp, str):
    print "it is not a string!")
else :
    print " you done!"

工作:是的

inp = 123
if not isintance(inp, str):
    print "it is not a string!")
else:
    print " you done!"

- >此路径不适用于raw_input():P 它真的很奇怪..

@Woly

非常感谢..你的道路运转得很好! :d

3 个答案:

答案 0 :(得分:0)

如果您想要检查数据类型, AND NOT EXISTS ( SELECT * FROM onlines WHERE username = users.username ) 如果你要求用户输入,结果应该是python2中的type(number)或python3中的<type 'str'>,所以你不需要转换。

<class 'str'>

修改
您需要检查输入是否不是数字。

inp = raw_input("Enter a word") # for instance number =123
try :
   i = str(inp)
   print i
except :
   # This will never happen

   print 'Please enter a str'

答案 1 :(得分:0)

你不必尝试 - 除了:

inp=input("enter a string: ")
if not isinstance(inp, str):
    print 'Please enter a str'

要使用try-except,您可以执行以下操作:

inp=input("enter a string: ")
try:
    if not isinstance(inp, str): raise
except: 
    print 'Please enter a str'

示例:

enter a string: 1
Please enter a str

enter a string: 1.1
Please enter a str

enter a string: 'yes'
<no output here>

编辑:因为目的是防止任何数字输入,所以正则表达式可以正常工作:

import re
inp=raw_input("enter a string: ")
if re.findall('[0-9]', inp):
    print 'Please enter a str'
else:
    print " you done!"

答案 2 :(得分:0)

您的代码无法按预期工作,因为raw_input 始终返回字符串

您正在使用的试用/除外模板在您要求输入数字时起作用,因为您将用户输入的字符串转换为intfloat如果传递的字符串与其类型不对应,则intfloat构造函数将引发异常。这与str不起作用,因为不需要转换。在已经是字符串的内容上调用str永远不会失败。

如果您想根据其内容而不是其类型拒绝某些字符串,则需要执行其他操作。例如,如果字符串中的所有字符都是按字母顺序排列的话str.isalpha将返回True