为什么我的例外不起作用

时间:2016-05-13 18:00:45

标签: python python-3.x exception

我正在尝试制作刽子手,我知道还有很多工作要做,但我无法弄清楚为什么底部的例外不起作用。这是我的代码。

import random
hideword = 0
player1 = input('''What is player 1's you name? ''')
player2 = input('''What is player 2's you name? ''')
letterlist = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k' ,'l' ,'m' ,'n' ,'o' ,'p','q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
print(player1 + 'is first!')
word = input(player2 + ', please turn away, ' + player1 + ' please write a LOWER case word for ' + player2 + ' to guess. ' )
wordsplit = list(word)
while hideword < 50:
    print()
    hideword += 1
while True:
    print(player2 + ', ' + player1 + ''''s word fits into these blanks''')
    print('_ ' * len(wordsplit))
    letter = input(player2 + ' please type a LOWER case letter to guess. ' )
    wordsplit.index(letter)
    letterlist.remove(letter)
    try:
        if letter in wordsplit:
            print('CORRET!')
            print('_ ' * wordsplit.index(letter) + letter + ' _ ' * (len(wordsplit) - wordsplit.index(letter) - 1))
            break
    except ValueError:
        print('Incorrect! Try again')

3 个答案:

答案 0 :(得分:1)

您需要else,而不是try..except。后者用于导致程序崩溃的事情。在程序中的那个点上检查成员身份不会导致这样的错误。

try:
    if letter in wordsplit:
        print('CORRET!')
        print('_ ' * wordsplit.index(letter) + letter + ' _ ' * (len(wordsplit) - wordsplit.index(letter) - 1))
        break
except ValueError:
    print('Incorrect! Try again')

更改为:

if letter in wordsplit:
    print('CORRET!')
    print('_ ' * wordsplit.index(letter) + letter + ' _ ' * (len(wordsplit) - wordsplit.index(letter) - 1))
    break
else:
    print('Incorrect! Try again')

答案 1 :(得分:0)

当您正在检查if letter in wordsplit时,您无法使用ValueError提出wordsplit.index(letter)

因此,无需提出错误。 如果letter not in wordsplit,请按照else进行操作,如前所述。

答案 2 :(得分:0)

好吧,在你的try区块中没有任何东西可以抛出一个异常,处理你的情况的最好方法可能就是按照建议使用if..else

但是,这些行上已经存在异常:

wordsplit.index(letter)
letterlist.remove(letter)

这是您使用try..except的方法(仅作为示例,因为if..else也有效):

letter = input(player2 + ' please type a LOWER case letter to guess. ' )

try:
    position = wordsplit.index(letter)
    letterlist.remove(letter)
    print('CORRECT!')  
    print('_ ' * position + letter + ' _ ' * (len(wordsplit) - position - 1))
    break

except ValueError:
    print('Incorrect! Try again')