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
,这永远不会导致异常。答案不错,但我认为它属于另一个问题。;)