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