您好,我有一個(gè)函數(shù)可以解析文件中的前 60 行,并且應(yīng)該在存在完全空白的行時(shí)提醒用戶。然而,這些可能發(fā)生在這 60 行中的任何位置,因此我希望腳本解析整個(gè) 60 行,主要是因?yàn)槲倚枰渲袔仔械臄?shù)據(jù)來進(jìn)行錯(cuò)誤報(bào)告。我們可能想知道這些錯(cuò)誤將來會(huì)發(fā)生在哪里。我寫了這個(gè):def header_data(data): dictionary = {} datalen = len(data) itrcntr = 0 try: for line in data: itrcntr += 1 if line.isspace(): raise Exception('File has badly formatted header data line(s)') else: linesplit = line.rstrip().split(":") if len(linesplit) > 1: dictionary[linesplit[0]] = linesplit[1].strip() return dictionary except Exception as e: errmsg = str(e) if itrcntr == datalen: return (dictionary, errmsg) else: pass 有了這個(gè)函數(shù),我希望如果它發(fā)現(xiàn) itrcntr 不等于 datalen,它會(huì)通過并返回到 try 塊并繼續(xù)到下一行。但這并沒有發(fā)生。相反,它會(huì)跳出函數(shù)并在函數(shù)調(diào)用者的下一行中繼續(xù)。如何讓它繼續(xù)循環(huán),直到到達(dá)循環(huán)末尾,然后返回字典以及錯(cuò)誤消息?或者這不能通過 try catch 異常處理程序來完成嗎?
2 回答

慕田峪9158850
TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
除非你想捕獲除 的情況以外的異常,否則line.isspace我根本不會(huì)使用塊。try只需將您的錯(cuò)誤收集在列表中,例如:
errors = []
for line in data:
itrcntr += 1
if line.isspace():
errors.append('File has badly formatted header data at line %d.' % itrcntr)
# then at the end:
if errors:
# do something about it...

慕妹3146593
TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果發(fā)生任何異常,try 子句將被跳過,而 except 子句將運(yùn)行。
如果您在 Try 中的任何位置引發(fā)異常,則其他所有內(nèi)容都將被跳過。因此,如果您希望循環(huán)繼續(xù),那么就不要使用 Try except。
只需收集所有錯(cuò)誤消息然后將其返回即可。
添加回答
舉報(bào)
0/150
提交
取消