2017-06-29 61 views
2

请注意我对此是新手。您的帮助将不胜感激。Python 3除了TypeError不起作用

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') 

的整数我不明白,不print('Please enter male or female'),并要求用户输入。

+0

因为'try'本身不会失败。你可以把一个整数转换成它的字符串表示就好了,它不会等于'female'或'male'。 – roganjosh

+0

提示:'str(3)'不会抛出'TypeError'。 –

+0

我认为你的问题的简单答案是,如果用户输入一个整数(比如说5),你将不会从'input'返回一个'int',而是你会得到''5“'这是一个' str'本身。 –

回答

6

实际上您并不需要在此处进行例外检查。此外,您的条件声明不会引起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) 

小记,你会发现我介绍了format字符串的方法。这使得操纵字符串更容易养成习惯,以这种方式处理字符串操作/格式化。

+3

Python 3中不是'input'字符串的结果,所以您在技术上不需要将它作为一个整体进行投射? – DavidG

+0

@DavidG是的,那是真的。我没有完全理解这一点。谢谢。我会更新我的答案来解释这一点。 – idjaw

+0

谢谢你指出这一点。如果 – byenwomolo

2

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' 

因为字符串“ABC”不能转换为一个整数(以10为基数,至少...)

+0

我想值得注意的是,这会抛出一个'ValueError'而不是'TypeError',并且不会被原始代码捕获,因为转换超出'try' /'except'块之外。 – roganjosh

+1

噢,没错,我没有注意到'try/except'模块只包含'if' - 这永远不会导致异常。 –

+1

很好的答案,但我认为它属于不同的问题。 ;) –