簡體   English   中英

如果文件不存在則重新運行代碼不起作用

[英]Rerun code if file doesn't exist is not working

我有這段代碼來讀取文件

def collect_exp_data(file_name):
    data = dict()
    while True:
        try:
           with open(file_name, 'r') as h:
                break
                for line in h:
                batch, x, y, value = line.split(',')                            
                try: 
                    if not batch in data:
                        data[batch] = []
                    data[batch] += [(float(x), float(y), float(value))]
                except ValueError: 
                    print("\nCheck that all your values are integers!")   
        except FileNotFoundError:
            print("\nThis file doesn't exist, Try again!")
    return data

我正在嘗試添加一些錯誤處理,我想重新要求用戶輸入文件以防文件不存在,但代碼只是返回一個無限循環? 我做錯了什么,我該如何解決?

編輯:

如果我嘗試將 while 循環帶到外面,那么它會在文件不存在的情況下工作,但如果文件存在,代碼只是在循環后停止而不是接下來運行 function,這是代碼

def collect_exp_data(file_name):
    data = dict()
    with open(file_name, 'r') as h:
        for line in h:
            batch, x, y, value = line.split(',')                           
        try: 
            if not batch in data:
                data[batch] = []
            data[batch] += [(float(x), float(y), float(value))]
        except ValueError: 
            print("\nCheck that all your values are integers!")   
    return data

while True:
    file_name = input("Choose a file: ")
    try:
        data = collect_exp_data(file_name)
        break
    except FileNotFoundError:
        print('This file does not exist, try again!')

制造一個打破循環的條件

finished = False
while not finished:
    file_name = input("Choose a file: ")
    try:
        data = collect_exp_data(file_name)
        # we executed the previous line succesfully,
        # so we set finished to true to break the loop
        finished = True
    except FileNotFoundError:
        print('This file does not exist, try again!')
        # an exception has occurred, finished will remain false
        # and the loop will iterate again

在主 function 中執行所有異常處理。

def collect_exp_data(filename):
    data = dict()
    with open(filename) as infile:
        for line in map(str.strip, infile):
            batch, *v = line.split(',')
            assert batch and len(v) == 3
            data.setdefault(batch, []).extend(map(float, v))
    return data

while True:
    filename = input('Choose file: ')
    try:
        print(collect_exp_data(filename))
        break
    except FileNotFoundError:
        print('File not found')
    except (ValueError, AssertionError):
        print('Unhandled file content')

顯然,如果禁用調試,斷言將不起作用,但你明白了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM