Python3除了TypeError不工作
请注意我是新来的。谢谢你的帮助Python3除了TypeError不工作,python,python-3.x,Python,Python 3.x,请注意我是新来的。谢谢你的帮助 while True: user = str(input('Enter users sex:')) try: if user == 'female' or user == 'male': break except TypeError: print('Please enter male or female') continue print('The user is:',user) 我不明白什么时候输入
while True:
user = str(input('Enter users sex:'))
try:
if user == 'female' or user == 'male': break
except TypeError:
print('Please enter male or female')
continue
print('The user is:',user)
我不明白什么时候输入了整数
except TypeError:
print('Please enter male or female')
不打印('请输入男性或女性')并要求用户输入。您实际上不需要在此处进行异常检查。此外,您的条件语句不会引发
TypeError
。相反,只需使用条件语句继续循环即可。这也不需要您在此处使用任何continue
语句
此外,所有input
调用都将返回一个字符串,因此不需要强制转换。因此,只需在不使用str
调用的情况下进行输入:
while True:
user = input('Enter users sex:')
if user == 'female' or user == 'male':
break
else:
print('Please enter male or female')
print('The user is:', user)
如果您将其放入函数中,您只需在满足后返回最终结果,然后打印该函数返回内容的“结果”。以下示例将有助于说明这一点:
def get_user_gender():
while True:
user = str(input('Enter users sex:'))
if user == 'female' or user == 'male':
break
else:
print('Please enter male or female')
return 'The user is: {}'.format(user)
user_gender = get_user_gender()
print(user_gender)
请注意,我引入了格式
字符串方法。这样可以更容易地处理字符串,养成以这种方式处理字符串操作/格式化的习惯 input()
返回Python 3中的字符串。对它调用str
,使它保持原样,因此它永远不会引发异常
如果尝试执行以下操作,可能会出现错误:
number = int(input("enter a number: "))
enter a number: abc
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-9-ec0ea39b1c6c> in <module>()
----> 1 number = int(input("enter a number: "))
ValueError: invalid literal for int() with base 10: 'abc'
number=int(输入(“输入一个数字”))
输入一个数字:abc
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
---->1个数字=整数(输入(“输入一个数字”))
ValueError:基数为10的int()的文本无效:“abc”
因为字符串“abc”无法转换为整数(以10为基数,至少…),因为
try
本身不会失败。你可以把一个整数转换成它的字符串表示形式,它不等于female
或male
。提示:str(3)
不会抛出TypeError
。我想你问题的简单答案是,如果用户输入一个整数(比如,5)您不会从input
返回int
,而是会得到“5”
,这是str
本身。FWIW,将从input()
返回的字符串传递到str()
没有实际危害:您只需返回原始字符串对象即可。但是这是一个不必要的步骤,所以它只是增加了代码的混乱。除了已经发布的有用的答案之外。我建议您阅读更多关于异常的内容。您在这里试图做的并不是正确使用它们。input
的结果不是Python 3中的一个字符串吗,所以从技术上讲,您不需要将其转换为一个字符串?@DavidG是的,这是真的。我不太明白这是怎么回事。谢谢我将更新我的答案以解释这一点。@idjaw如果我想将其作为一个函数,将添加:def usergender():而True:user=input('Enter users sex:')如果user='female'或user='male':则中断其他:print('Please Enter male或female')print('user is:',user)
够了吗?@idjaw非常感谢您的解释。我想值得注意的是,这会抛出一个ValueError
而不是TypeError
,并且不会在原始代码中被捕获,因为转换在try
/块之外。哦,没错,我没有注意到try/except
块只包含if
,这永远不会导致异常。答案不错,但我认为它属于另一个问题。;)