这就是我所拥有的
# my code
print "This is fun"
said = raw_input("<...")
print type (said) #checking to see what type "\r" would be
if said == "\r":
print type(said)
print "Error"
said = raw_input("<...")
print "for the whole family.\n"*int(said)
print "HAHaHaHAAAAA"
输入“2”时会发生这种情况。该模块完成了预期的工作
This is fun
<...2
<type 'str'>
for the whole family.
for the whole family.
HAHaHaHAAAAA
输入“enter \ cr”时会发生这种情况
This is fun
<...
<type 'str'>
Traceback (most recent call last):
File "C:\Python27\ascii.py", line 10, in <module>
print "for the whole family.\n"*int(said)
ValueError: invalid literal for int() with base 10: ''
This is fun
<...
<type 'str'>
Traceback (most recent call last):
File "C:\Python27\ascii.py", line 10, in <module>
print "for the whole family.\n"*int(said)
ValueError: invalid literal for int() with base 10: ''
它将“输入\”\ r \ n“识别为字符串 它没有在“if”语句中识别“\ r”,而是在第10行中识别。
为什么会这样?
答案 0 :(得分:1)
如果您在访问said
语句之前尝试确保print
是一个整数,那么您应该使用while
循环:
while True:
try:
said = int(raw_input('<...'))
break
except ValueError:
print('Please enter a number')
您的代码未执行您认为应该执行的操作的原因是因为如果没有为raw_input ()
输入值,则该值未设置为\r
,则将其设置为空字符串, ''
。 raw_input
函数将从值中删除返回字符。如果输入\r
,则会自动转义,并且该值将设置为\\r
。
答案 1 :(得分:1)
在条件设置中,您正在检查said
是否为"\r"
。嗯,它不是(在你的测试中,它是""
),所以条件是假的。
要在调试时正确查看变量的内容,请尝试使用类似print '%r' % said
的内容。
如果您使用带有CR / LF行结尾的终端,字符串文字"\r"
可能会以字符串结尾,但显然您不是(或者终端驱动程序在将输入传递给Python之前规范化行结尾) )。
答案 2 :(得分:0)
问题在于打印"for the whole family.\n"*int(said)
空字符串''
无法转换为int
。
检查字符串是否为空或使用print "for the whole family.\n"*int(said or '0')