这里是一个完整的python新手,所以不要对我大喊大叫:D
我正在与在线服务进行通信,并且弹出了一些问题。:)
服务返回的错误是:{"error" : {"code" : 1, "message" : "Descriptive message."}}
会话持续大约 6 小时,所以我真的想缓存我的会话并重用它,因为在这 6 小时内我可以发出数百个请求,并且对每个请求都进行重新验证是不礼貌的。
所以这个脚本有效,但我不喜欢最后的大执行位。
import requests
session_file = 'session'
url = 'service.com/articles/get'
api_key = 'my_api_key_goes_here'
class MyException(Exception):
pass
def load_session(session_file):
f = open(session_file, 'r')
session = f.read()
f.close
return session
def make_post(session, parameters):
post_data = json.dumps({"jsonrpc":"2.0", "session_id":session, "params":parameters})
return post_data
def get_article(article_id):
session = load_session(session_file)
post_data = (session, article_id)
result = requests.post(url, post_data)
if 'error' in result:
raise MyException(result['error'])
else:
return result
for attempt in range(2):
try:
article = get_article(123)
print(article)
break
except MyException as e:
if e.args[0]['code'] == 1:
print('Session expired, renewing')
login(api_key) #login function omitted for clarity
#it also writes the session string to a file
else:
print(e) #something else happened (for example 'no such article')
break
else:
break
有没有办法更好地做到这一点?
可以在功能本身中移动检查和更新。最后的执行将是:
try:
article = get_article(123)
print(article)
except MyException as e:
print(e)
我的问题是我有一堆与 api 通信的其他函数,然后我必须用这个检查来膨胀它们中的每一个。
也许支票可以做成一个函数(我不知道怎么做)?
谢谢!
PS 将来我计划将这些功能移动到另一个文件中,然后将它们导入。我对这部分也有一些问题,但我稍后会发布一个新问题:)