自动轨迹绘制实例中,与嵩天老师的代码一模一样,运行后总报错,错误类型为
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,都可以被略过。