python 自動軌跡繪制 SyntaxError: unexpected EOF while parsing


自動軌跡繪制實例中,與嵩天老師的代碼一模一樣,運行后總報錯,錯誤類型為

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,都可以被略過。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM