我是Python的新手,在下面的函数中,我正在尝试进行一些验证过程。
def countUpToTen(counter):
if type(counter) is not int or counter == None:
print("Invalid parameter!")
if counter > 10:
print("Counter can not be greater than 10!")
return False
else:
count = 1
while (count <= counter):
print 'The count is:', count
count = count + 1
print("Done counting !")
countUpToTen("0s")
但是,当我将其称为countUpToTen("0s")
时,它会打印Invalid parameter!
和Counter can not be greater than 10!
,但我希望只有Invalid parameter!
。我不知道它如何将字符串与第二个if语句中的数字进行比较。任何帮助都会得到满足。
答案 0 :(得分:2)
打印第一条错误消息后,您没有退出该功能。
在Python 2中,你仍然可以比较字符串和整数,数字总是低于而不是其他任何东西(None
除外),所以第二个if
语句也匹配:
>>> '0s' > 10
True
Python 3不再支持任意类型之间的比较,而int
与str
的比较则会引发异常。
在这种情况下,当参数无效时,您应该使用return
提前退出函数:
if type(counter) is not int or counter == None:
print("Invalid parameter!")
return
请注意,测试类型的Pythonic方法是使用isinstance()
。您应该使用None
身份测试来测试is
,因为None
是一个单例对象,但此处的测试是多余的;如果counter
为None
,则它不是int
的实例。以下就足够了:
if not isinstance(counter, int):
print("Invalid parameter!")
return
不要提前返回,而是考虑使用elif
进行下一次测试:
if not isinstance(counter, int):
print("Invalid parameter!")
elif counter > 10:
print("Counter can not be greater than 10!")
else:
# etc.
请注意,您几乎肯定使用Python 2,因此使用了太多括号。 Python 2中的print
是一个语句,而不是一个函数,并且使用括号无论如何会导致您尝试打印元组:
>>> print('This is a tuple', 'with two values')
('This is a tuple', 'with two values')
>>> print 'This is just', 'two values'
This is just two values
您可能已经发现了这一点,因为您使用的print
有两个参数,并且已经在一个位置没有括号。
while
循环的测试也不需要使用括号:
while count <= counter:
不要使用while
并手动递增count
,而只需使用for
循环和range()
:
if not isinstance(counter, int):
print "Invalid parameter!"
elif counter > 10:
print "Counter can not be greater than 10!"
else:
for count in range(1, counter + 1):
print 'The count is:', count
后一个循环也可以写成:
for count in range(counter):
print 'The count is:', count + 1
答案 1 :(得分:1)
您可以稍微重写if / else语句,使其成为if / elif / else构造:
def countUpToTen(counter):
if type(counter) is not int or counter == None:
print("Invalid parameter!")
elif counter > 10:
print("Counter can not be greater than 10!")
return False
else:
count = 1
while (count <= counter):
print 'The count is:', count
count = count + 1
print("Done counting !")
countUpToTen("0s")
这也可以提供您期望的输出。