Python 使用用户输入时尝试“除外”

Python 使用用户输入时尝试“除外”,python,exception,while-loop,try-catch,Python,Exception,While Loop,Try Catch,下面是我的问题的一个例子。我有一个脚本正在尝试访问excel文件。它可以正常工作,但是如果文件当前处于打开状态,我将得到一个权限拒绝错误。我通常会关闭文件并再次运行脚本,但我希望能够关闭程序并只输入一个击键,例如“y”,以指示文件已关闭并重试。我现在的问题是,当我输入任何值时,它仍将继续尝试运行,如果第二次失败,它将退出脚本。有什么想法吗 input_yes = 'y' answer = {} try: finalSheet('my file.xlsx') except: whi

下面是我的问题的一个例子。我有一个脚本正在尝试访问excel文件。它可以正常工作,但是如果文件当前处于打开状态,我将得到一个权限拒绝错误。我通常会关闭文件并再次运行脚本,但我希望能够关闭程序并只输入一个击键,例如“y”,以指示文件已关闭并重试。我现在的问题是,当我输入任何值时,它仍将继续尝试运行,如果第二次失败,它将退出脚本。有什么想法吗

input_yes = 'y'
answer = {}
try:
    finalSheet('my file.xlsx')
except:
    while answer != str(input_yes):
         answer = input('Please confirm that (my file.xlsx) is closed and enter y: ')
         finalSheet('my file.xlsx')
         continue

我不能真正用python编程,但在大多数语言中,异常处理块不被认为是
try
块的一部分,否则您将无法从中重新显示异常

您需要更改代码,以便整个过程都在一个循环中

success = False

while not success:
    try:
        finalSheet('my file.xlsx')
        success = True
    except:
        # We actually don't care what the answer is. You could bail if the 
        # answer is no I guess
        answer = input('Please confirm that (my file.xlsx) is closed and enter y: ')
为上面的错误道歉,我的Python不太好

try:
    while True:
        try:
            finalSheet('my file.xlsx')
            print('Success')
            break
        except:
            if not input('Please confirm that (my file.xlsx) is closed and enter y: ') == str(input_yes):
                raise KeyboardInterrupt #or any other exception
except KeyboardInterrupt:
    print('Cancelled by user')
    return


您希望将整个块放入“尝试”中。 如果操作成功,循环将中断,跳过外部的“Exception”块

如果出现异常(即文件被锁定),并且用户回答“y”,则循环继续


如果文件已锁定且用户已应答!“y”然后引发一个新的异常,退出循环进入最后一个“exception”块。

我不想用户取消,我希望脚本保持不变,并等待文件关闭。我无法尝试,因为第一条注释正是我需要的时候,但如果将来有人遇到这种情况,我希望他们能尝试一下。@Sigmas在您使用的答案中,如果用户按下除“y”以外的任何键,它将被中止,而在我的代码中,它将等待用户按下“y”,这是我从问题中理解的。但如果你真的喜欢他的方法,没问题。我试过你的,效果也一样。因为@Yotamz脚本也能工作,所以我以前没有尝试过。我对它做了一点修改,但两者都很棒。我从来没有怀疑过你!没问题,我也在学习,第一条评论正是我需要的,但是谢谢你的输入。
input_yes = 'y'
while True:
    try:
        finalSheet('my file.xlsx')
        break #If reading the file succeeded, it will leave the outer loop
    except:
        while True:
            answer = input('Please confirm that (my file.xlsx) is closed and enter y: ')
            if answer == input_yes:
                break #If the answer is 'y', it will leave the inner loop, and try to read the file. Otherwise, it will continue to ask for readiness