對於開發功能,除了把功能實現之外,對於有輸入的功能要能夠具備有處理使用者任何輸入的狀況 舉例來說 實現一個計算的功能,今天如果有除法這個計算功能 是否就得考慮使用者輸入除以零這個數字 在以前來說除0是不合法的,因為compoler不會過 不過IEEE 754 二進位浮點數算術標準 https://zh.wikipedia.org/zh-tw/IEEE_754 其實有定義了inf 與 -inf 所以 除0為 inf, log(0)為 -inf 就為合理的結果 除此之外 除法還有一個需要考慮的輸出結果位數 1/3 = 0.33333333..... 今天假設 1/3 = 0.33當結果 會不會造成 1/3 + 1/3 + 1/3 = 0.99 這些都是防呆機制所需要考慮的 以下是一些防呆機制範例 df = pd.DataFrame() tag = True # Retry up to three times for _ in range(3): response = requests.get("http://172.22.83.191/Abnormal_API/api/GetAll") if response.status_code == 200: data = response.json() df = pd.DataFrame(data) # Check if "登錄時間" column exists and is not 'null' if "登錄時間" in df.columns and not df["登錄時間"].eq('null').any(): break # Break the loop if conditions are met else: # Wait for some time before retrying time.sleep(1) else: tag = False # If loop completes without breaking, raise an exception 這個是調用api使用最多三次的retry的防呆機制 #filter the machine model df = df[df['機種'].str.contains(info.machine_model)] # filter the problem type ## remove special character problem_type = str(info.problem_type) problem_type = "".join(ch for ch in problem_type if ch.isalnum()) df['異常類型明細名稱'] = df['異常類型明細名稱'].str.replace(r'\W', '', regex=True) # df['異常類型附件'] = df['異常類型附件'].str.replace(r'\W', '', regex=True) ## all lowercase problem_type = problem_type.lower() df['異常類型明細名稱'] = df['異常類型明細名稱'].str.lower() # ## remove space problem_type = "".join(ch for ch in problem_type if ch!="") df['異常類型明細名稱'] = df['異常類型明細名稱'].apply(lambda x: x.replace(' ', '')) df = df[df['異常類型明細名稱'].str.contains(problem_type)] if df.empty: return f"There are no data of {info.problem_type} for machine model {info.machine_model}.", info.language 這個是對於dataframe欄位選擇後如果為空就直接return的防呆機制 if (np.any(unique_wo != "")) or (np.any(unique_site != "")) or (np.any(unique_person != "")): return f"There are {len(df)} occurance of {info.problem_type} for machine model {machine} \n\n工單: {unique_wo} \n\n站點: {unique_site} \n\n異常登陸人員: {unique_person} \n\n 日期: {unique_date} \n\n Issue Type :{info.problem_type} \n\n Error Type :{unique_type}:{cleaned_unique_append}\n\n 1. {info.problem_type}{out1}\n\n 2. {ans2} \n\n 3. {ans1}", info.language else: return f"There are no data of {info.problem_type} for machine model {info.machine_model}.", info.language else: return f"Cannot call the API or retrieve valid data in {info.machine_model}", info.language 這邊是對於df細項如果為空的防呆機制。 有沒有所謂的最好最完美的防呆機制? {try except} ?