把請求結果轉成給使用者的訊息
Turn a Request Outcome into a User Message・pync-25-01
- Python 程式設計・25 APIs & Web Requests
時間限制 1 秒・記憶體 31 MB
送出程式要先用 Discord 帳號登入 Aki-Judge,並加入註解 Annotated 的 Discord 伺服器(免費)。看題目不用登入。
題目敘述
呼叫網路服務時,你無法事先知道伺服器是否正常、網路是否穩定,只能先送出請求,再處理回來的結果。一個好用的工具,會針對不同的結果給使用者不同的、有用的訊息,而不是丟出一整段錯誤堆疊,也不是對所有失敗都只說「發生錯誤」。
請把一次請求的結果轉成一段訊息。結果共有四種:
- 完全沒有回應:通常是使用者自己的網路有問題。
- 伺服器回應太慢(逾時):稍後再試即可。
- 伺服器正常回應:只有這種情況回應內容裡才有資料。
- 伺服器回了錯誤狀態碼:此時有用的是狀態碼旁邊的說明文字。
說明文字放在哪個欄位,各服務不一致。有的服務放在 reason,有的放在 message,有的(例如擋在前面的閘道)兩者都沒有。所以不能直接取 body["reason"]:要先找 reason,找不到就改找 message,兩者皆無也要有一句可以顯示的話。
評測環境沒有網路,請求的結果會直接從標準輸入給你。
輸入格式
第一行是下列其中之一:ConnectionError(沒有任何回應)、Timeout(伺服器太慢),或一個 HTTP 狀態碼,例如 200、400、404。
若第一行是狀態碼,第二行是回應內容,單獨一行的 JSON。
輸出格式
ConnectionError 輸出一行:Can't reach the network, please check your connection。
Timeout 輸出一行:The server took too long to respond, try again later。
200 輸出一行,內容取自回應的 current_weather -> temperature:Current temperature: <temperature> C。
其他狀態碼輸出兩行:The server returned an error, status code: <code>,接著 Reason: <reason>。<reason> 取回應中的 reason;若沒有 reason,取 message;兩者都沒有就寫 not given。
範例
範例 1
輸入
404
{"message":"not found"}輸出
The server returned an error, status code: 404
Reason: not found送出程式要先用 Discord 帳號登入 Aki-Judge,並加入註解 Annotated 的 Discord 伺服器(免費)。看題目不用登入。
卡住了可以到 Discord 的 #程式問題 發問,小墨助教會先給提示,不會直接給答案。