// 題目

把請求結果轉成給使用者的訊息

Turn a Request Outcome into a User Message・pync-25-01

  • Python 程式設計・25 APIs & Web Requests

時間限制 1 秒・記憶體 31 MB

到 Aki-Judge 送出

送出程式要先用 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

到 Aki-Judge 送出

送出程式要先用 Discord 帳號登入 Aki-Judge,並加入註解 Annotated 的 Discord 伺服器(免費)。看題目不用登入。

卡住了可以到 Discord 的 #程式問題 發問,小墨助教會先給提示,不會直接給答案。