自動軌跡繪制實例中,與嵩天老師的代碼一模一樣,運行后總報錯,錯誤類型為
SyntaxError: unexpected EOF while parsing 這是python語法錯誤
看別的大佬說要么是語法上少了一個括號,要么是中英文輸入法沒有貫徹到底,怎么比我的代碼都沒問題
Traceback (most recent call last): File "C:/Users/Desktop/python實例/AutoTraceDraw.py", line 12, in <module> datals.append(list(map(eval,line.split(',')))) File "<string>", line 0 ^ SyntaxError: unexpected EOF while parsing #Python 語法錯誤
通過try/except捕捉異常后,發現程序在執行完except語句后可以正常執行,說明問題出現在
datals.append(list(map(eval,line.split(','))))
1 #AutoTraceDraw.py 2 import turtle as t 3 t.title('自動軌跡繪制') 4 t.setup(800,600,0,0) 5 t.pencolor('red') 6 t.pensize(5) 7 #數據讀取 8 try: 9 datals = [] 10 f = open('data.txt') 11 for line in f: 12 line = line.replace('\n','') 13 datals.append(list(map(eval,line.split(',')))) 14 f.close() 15 except: 16 print('出現錯誤') 17 #自動繪制 18 for i in range(len(datals)): 19 t.pencolor(datals[i][3],datals[i][4],datals[i][5]) 20 t.fd(datals[i][0]) 21 if datals[i][1]: 22 t.right(datals[i][2]) 23 else: 24 t.left(datals[i][2])
有意思的是運行結果如下:
這個結果說明了
datals.append(list(map(eval,line.split(','))))
這段代碼已經完成了它的使命,但出於某種原因它最后報錯了,這一點從依然可以正常繪制圖形就能看出來。
在這句代碼后面添加print()函數
#數據讀取 try: datals = [] f = open('data.txt') for line in f: line = line.replace('\n','') datals.append(list(map(eval,line.split(',')))) print(datals) f.close() except: print('出現錯誤')
結果如下:
說明我打開的data文件最后一行不是一組正常的數據接口,最后發現我在data.txt文件中最后一行打了一個回車,導致多出來一行空數據(也就最后一行末尾有個回車符,使得最后一行下面還有一行,該行沒有被填入任何字符,長度為0)就提示
SyntaxError: unexpected EOF while parsing這樣的錯誤信息。
解決辦法很簡單:刪掉多余的回車,使數據文件的最后一行數據后面啥都沒有即可(不要存在下一行)
eval(expression[, globals[, locals]]) expression表達式的值不能為空

第二種解決方案:增加一個條件語句
1 datals = [] 2 f = open('data.txt') #要注意data文件的最后一行不能有\n符
3 for line in f: 4 line = line.replace('\n','') 5 if line !='': 6 datals.append(list(map(eval,line.split(',')))) 7 f.close()
這樣即使數據文件后面有若干個\n,都可以被略過。