鱼C论坛

 找回密码
 立即注册
查看: 1349|回复: 16

[已解决]请教一下,为啥显示语法错误?

[复制链接]
发表于 2019-12-8 20:51:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import requests
import json

class TrainService(object):
    def __init__(self):
        with open('code.json','r') as file:
            code=eval(file.read())
        self.code=code
        self.code_url="https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9002"
        self.headers={'User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.7 Safari/537.36'}
    def crawlTrainMess(self,from_station,to_station,train_date):
        self.url="https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT".format(train_date,self.code[from_station],self.code[to_station])
        response=requests.get(self.url,headers=self.headers)
        train_json=json.load(response.text)
        results=train_json['data']['result']
        train_list=[]
        for i in results:
            temp=i.split('|')
            train_list.append([temp[3], temp[8], temp[9], temp[25], temp[26]])
        #print(train_list)
        return train_list
    def crawlCodeMess(self):
        response=requests.get(self.code_url,headers=self.headers)
        station_list=response.text.split('@')[1:]
        code={}
        for i in station_list:
            temp=i.split('|')
            code[temp[1]]=temp[2]
        #print(code)
        with open('code.json','w') as file:
            file.write(str(code))
if __name__=='__main__':
    ts=TrainService()
    ts.crawlCodeMess()
最佳答案
2019-12-9 00:51:49
你的城市数据都没有下载下来,你怎么去读它,没有文件,肯定会报错。不应该放在实例化里面,至少得先请求在本地才可以
其次如果你是读出来用的话可以使用这样的格式:
  1.             with open(path,"r",encoding="UTF-8") as f:
  2.                 result = json.loads(f.read(),encoding="UTF-8")
复制代码


如果你是写入用的话可以使用这样的格式:
  1.             with open(path,"w",encoding="UTF-8") as f:
  2.                 json.dump(city_dict,f)
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-8 21:01:33 | 显示全部楼层
错误信息是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 21:33:22 | 显示全部楼层

Traceback (most recent call last):
  File "E:/Projects/Python-Spiders/12306_2/TrainService.py", line 33, in <module>
    ts=TrainService()
  File "E:/Projects/Python-Spiders/12306_2/TrainService.py", line 7, in __init__
    code=eval(file.read())
  File "<string>", line 0
   
    ^
SyntaxError: unexpected EOF while parsing
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 21:34:09 | 显示全部楼层
检查了,语法我看不出来哪里有错误啊????&#128532;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 21:37:14 | 显示全部楼层
你把file.read()的内容打出来看看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 21:43:44 | 显示全部楼层
冬雪雪冬 发表于 2019-12-8 21:37
你把file.read()的内容打出来看看。

QQ截图20191208214259.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 21:44:41 | 显示全部楼层
冬雪雪冬 发表于 2019-12-8 21:37
你把file.read()的内容打出来看看。

层主 是图中这么打印吗??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 21:49:28 | 显示全部楼层
不是的,f.read()调用一次后指针就已经到末尾了。再调用是没有内容的。
你可以先把code=eval(file.read())注释掉,再打印。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 21:54:22 | 显示全部楼层
冬雪雪冬 发表于 2019-12-8 21:49
不是的,f.read()调用一次后指针就已经到末尾了。再调用是没有内容的。
你可以先把code=eval(file.read()) ...

什么都没有啊。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 21:58:01 | 显示全部楼层
如果是空字符串就是这样的错误提示。
>>> c=eval('')
Traceback (most recent call last):
  File "<pyshell#72>", line 1, in <module>
    c=eval('')
  File "<string>", line 0
   
    ^
SyntaxError: unexpected EOF while parsing
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 22:00:14 | 显示全部楼层
冬雪雪冬 发表于 2019-12-8 21:58
如果是空字符串就是这样的错误提示。
>>> c=eval('')
Traceback (most recent call last):

错误就是这个。具体什么原因呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 22:00:47 | 显示全部楼层
冬雪雪冬 发表于 2019-12-8 21:58
如果是空字符串就是这样的错误提示。
>>> c=eval('')
Traceback (most recent call last):

你的意思就是什么都没有,json是空的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 22:04:42 | 显示全部楼层
slhlde 发表于 2019-12-8 22:00
你的意思就是什么都没有,json是空的?

从现象上看,是这样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 22:10:11 | 显示全部楼层
冬雪雪冬 发表于 2019-12-8 22:04
从现象上看,是这样的。

那是什么原因导致的呢??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 22:11:40 | 显示全部楼层
slhlde 发表于 2019-12-8 22:10
那是什么原因导致的呢??

程序中没有看到写这个文件的语句,不知道这个文件是如何生成的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 22:29:42 | 显示全部楼层
冬雪雪冬 发表于 2019-12-8 22:11
程序中没有看到写这个文件的语句,不知道这个文件是如何生成的。

感谢回复 我再看看,不懂的再次请教你。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-9 00:51:49 | 显示全部楼层    本楼为最佳答案   
你的城市数据都没有下载下来,你怎么去读它,没有文件,肯定会报错。不应该放在实例化里面,至少得先请求在本地才可以
其次如果你是读出来用的话可以使用这样的格式:
  1.             with open(path,"r",encoding="UTF-8") as f:
  2.                 result = json.loads(f.read(),encoding="UTF-8")
复制代码


如果你是写入用的话可以使用这样的格式:
  1.             with open(path,"w",encoding="UTF-8") as f:
  2.                 json.dump(city_dict,f)
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 18:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表