首页 > 解决方案 > 无法捕获 IndexError 并打印语句,还循环回输入

问题描述

我可以循环 ValueError,但只有 ValueError 会打印语句

IndexError 将停止代码,我想继续向用户询问“行号”。

def file_content(file_name):
    user_file = open(file_name, 'r')
    content = user_file.readlines()
    user_file.close()
    return content

def main():
    file_name = input('Enter the name of the file: ')

    try:
        content = file_content(file_name)
    

    except IOError:
        print ('File can not be fount. Program will exit.')
        exit()

    while True:
    
        try:
            line_number = input('Enter a line number: ')
            line_number = int(line_number)
            break
        
        
        except IndexError:
            print ('That is not a valid line number. Try again.')
        
        except ValueError:
            print ('You need to enter an integer for the line number. Try again.')
        
    
        
    
    print ('The line you requested:')
    print (content[line_number-1])

    
main()

这就是我运行代码时发生的情况

Enter the name of the file: datas.txt
Enter a line number: w
You need to enter an integer for the line number. Try again.
Enter a line number: 99
The line you requested:
Traceback (most recent call last):
File "/Users/yenvivian/Desktop/Python HW/hw04.py", line 40, in <module>
main()
File "/Users/yenvivian/Desktop/Python HW/hw04.py", line 37, in main
print (content[line_number-1])
IndexError: list index out of range

谢谢你

标签: pythontry-exceptindex-error

解决方案


要捕获异常,引发异常的代码必须位于try

try:
    line_number = input('Enter a line number: ')
    line_number = int(line_number)

    print ('The line you requested:')
    print (content[line_number-1])  # Inside the try

    break
        
        
except IndexError:
    print ('That is not a valid line number. Try again.')
    
except ValueError:
    print ('You need to enter an integer for the line number. Try again.')

推荐阅读