|
执行时报错
>python.exe tickets.py -v
Traceback (most recent call last):
File "tickets.py", line 86, in <module>
cli()
File "tickets.py", line 39, in cli
TransCollection(resp**e.json()['data'],opti**)
File "C:\Users\beckh\PycharmProjects\untitled\venv\lib\site-packages\requests\models.py", line 897, in json
return complexjson.loads(self.text, **kwargs)
File "C:\Users\beckh\AppData\Local\Programs\Python\Python36\lib\json\__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "C:\Users\beckh\AppData\Local\Programs\Python\Python36\lib\json\decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\beckh\AppData\Local\Programs\Python\Python36\lib\json\decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
但是我自己print(resp**e.json()['data']) 时输出正常
{'flag': '1', 'map': {'BJP': '北京', 'BXP': '北京西', 'CSQ': '长沙', 'CWQ': '长沙南'}, 'result': .....后面省略了
代码如下,麻烦各位大神看看是哪里出问题了。
# -*- coding:GBK -*-
"""命令行火车票查看器
Usage:
tickets.py [-gdtkz] <from> <to> <date>
tickets.py -v
tickets.py -h
Opti**:
-v 显示版本
-h 显示帮助菜单
-g 高铁
-d 动车
-t 特快
-k 快速
-z 直达
#Example:
# tickets 北京 上海 2016-10-10
# tickets -dg 成都 南京 2016-10-10
"""
from docopt import docopt
from stati** import stati**
import requests
from prettytable import PrettyTable
from colorama import init, Fore
init()
def cli():
arguments = docopt(__doc__,version='Naval Fate 2.0')
print(arguments)
from_station = stati**.get(arguments['<from>'])
to_staion = stati**.get(arguments['<to>'])
date = arguments['<date>']
url='https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT'.format(date, from_station, to_staion)
resp**e = requests.get(url, verify=False)
opti** = ''.join([key for key, value in arguments.items() if value is True])
TransCollection(resp**e.json()['data'], opti**).pretty_print()
class TransCollection:
header = '车次 车站 时间 历时 一等座 二等座 软卧 硬卧 硬座 无座'.split()
def __init__(self, available_trains, opti**):
self.availavle_trains = available_trains
self.opti** = opti**
def _get_duration(self, train_data):
duration = train_data.get('lishi').replace(':', '小时')+'分'
if duration.startswith('00'):
return duration[4:]
if duration.startswith('0'):
return duration[1:]
return duration
@property
def trains(self):
for train in self.availavle_trains:
train_data = train['queryLeftNewDTO']
train_number = train_data['station_train_code'][0].lower() # 开头转换成小写
if not self.opti** or train_number in self.opti**:
train = [
train_data['station_train_code'], # 车次
'\n'.join([Fore.GREEN+train_data['from_station_name']+Fore.RESET, # 车站
Fore.RED+train_data['to_station_name']+Fore.RESET]),
'\n'.join([Fore.GREEN+train_data['start_time']+Fore.RESET, # 车站
Fore.RED+train_data['arrive_time']+Fore.RESET]),
self._get_duration(train_data), # 历时
train_data['zy_num'], # 一等座
train_data['ze_num'], # 二等座
train_data['rw_num'], # 软卧
train_data['yw_num'], # 硬卧
train_data['yz_num'], # 硬座
train_data['wz_num'], # 无座
]
yield train
def pretty_print(self):
pt = PrettyTable()
pt._set_field_names(self.header)
for train in self.trains:
pt.add_row(train)
print(pt)
if __name__ == '__main__':
cli()
|
-
|