可以安全地假設從 strconv.Parse* 函數傳回的任何錯誤一定是由於錯誤的輸入資料造成的嗎?
可以安全地假設從strconv.Parse函數傳回的任何錯誤一定是由於錯誤的輸入資料造成的嗎?這個問題涉及了對於strconv.Parse函數的錯誤處理的理解。通常情況下,strconv.Parse函數傳回的錯誤確實是由於輸入資料不符合預期格式而導致的。然而,也有一些特殊情況需要考慮。一些錯誤可能是由於輸入資料的類型錯誤,例如將字串轉換為整數時,字串中包含了非數字字元。此外,還有一些邊界情況,例如整數溢位或浮點數精度遺失,也可能導致錯誤的回傳值。因此,對於從strconv.Parse函數傳回的錯誤,我們不能完全假設是由於錯誤的輸入資料造成的,而是需要綜合考慮其他可能的因素。
問題內容
在最近的一次程式碼審查中,審查者對我如何處理從 strconv.ParseUint()
傳回的錯誤提出了疑問。此函數被記錄為傳回轉換後的 uint 值和 *strconv.NumError
具體類型的錯誤。文件提到了可以傳回的該類型的兩個哨兵錯誤(ErrSyntax
和 ErrRange
),這兩個錯誤都意味著向其提供了錯誤資料。根據該函數的接口,也可能出現任何其他錯誤。
對於我的用例,我需要知道我擁有的字串值是否值得轉換為 uint。如果 ParseUint
回傳錯誤,而且它是哨兵錯誤之一,那麼我得到了答案。但如果返回的錯誤不是這些,那麼我返回它並停止執行。我的審閱者斷言,我應該假設從ParseUint
返回的任何錯誤意味著我給了它錯誤的數據,並且不需要檢查哨兵錯誤,沒有理由檢查哨兵錯誤,也不會傳回該錯誤(在我的用例中)。他們連結到 go 標準庫中的一個範例,其中來自 ParseUint
的錯誤被視為對錯誤輸入資料的檢查並且從未返回,並表示有很多這樣的範例。
雖然我當然可以理解,一定存在一種演算法,只要提供良好的數據和足夠的資源,就始終能夠計算出所需的結果,但現實世界並不總是符合理論理想。我在圖書館的文檔中找不到任何內容表明它不會也永遠不會因錯誤資料以外的任何其他原因而返回錯誤。標準庫有一個或可能有很多這樣的例子,一方面令人放心,另一方面令人恐懼,介於「兩個錯誤不能構成正確」和「他們正在這樣做,所以對我們來說一定是安全的”之間在這種情況下也這樣做。
這只是圖書館文件缺少一句話的情況嗎?或者當這兩個錯誤都不是時返回錯誤是好的嗎?我該如何推理?
解決方法
是的,可以安全地假設 strconv.ParseXXX
函數的錯誤是由於錯誤的輸入資料造成的。
從您提到的文件頁面:
我閱讀此內容的方式是「strconv.ParseXXX 中的任何錯誤都是 NumError
,並且可能是由於無效數字或位元大小範圍錯誤」。我的理解是,godocs 試圖盡可能完整地概述函數呼叫的期望範圍。
因此,我認為可以安全地假設這些是您可能會看到從 strconv.ParseXXX
函數返回的唯一錯誤。如果有其他東西回來,我會認為它是一個文件錯誤。
回答您的最後一個問題:您在標準函式庫呼叫此函數時觀察到的模式是正確的。傳回整個錯誤並讓呼叫者決定如何處理它。哨兵錯誤旨在幫助您了解出了什麼問題,並代表了這些函數可能出現的錯誤的全部範圍。
以上是可以安全地假設從 strconv.Parse* 函數傳回的任何錯誤一定是由於錯誤的輸入資料造成的嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

C++ 中取得絕對值的方法有兩種:1. 使用內建函數abs(),取得整數或浮點型的絕對值;2. 使用泛型函數std::abs(),取得各類支援絕對值運算資料類型的絕對值。

complex 類型用於表示 C 語言中的複數,包含實部和虛部。其初始化形式為 complex_number = 3.14 + 2.71i,實部可透過 creal(complex_number) 訪問,虛部可透過 cimag(complex_number) 存取。此類型支援常用的數學運算,如加、減、乘、除和取模。此外,還提供了一組用於處理複數的函數,如 cpow、csqrt、cexp 和 csin。

prime 是 C++ 中的關鍵字,表示質數類型,只能被 1 和本身整除,用作布林類型指示給定值是否為質數,為質數則為 true,否則為 false。

fabs() 函數是 C++ 中的一個數學函數,用於計算浮點數的絕對值,去除負號並傳回正值。它接受一個浮點參數,並傳回一個 double 類型的絕對值。例如,fabs(-5.5) 將傳回 5.5。此函數適用於浮點數,其精確度受底層硬體影響。

std 是 C++ 中包含標準函式庫元件的命名空間。為了使用 std,需要使用 "using namespace std;" 語句。直接使用 std 命名空間中的符號可以簡化程式碼,但建議僅在需要時使用,以避免命名空間污染。

Config 在Java 中表示配置訊息,用於調整應用程式行為,通常儲存在外部檔案或資料庫中,可透過Java Properties、PropertyResourceBundle、Java Configuration Framework 或第三方程式庫進行管理,其好處包括解耦、靈活性、環境意識、可管理性、可擴展性。

C++ 中的 min 函數可傳回多個值中的最小值。其語法為:min(a, b),其中 a 和 b 為要比較的值。也可以指定一個比較函數,以支援不支援 < 運算子的類型。 C++20 引入了 std::clamp 函數,可處理三個或更多值的最小值。

在 C++ 中求絕對值有三種方法:使用 abs() 函數,可計算任何型別數字的絕對值。使用 std::abs() 函數,可計算整數、浮點數和複數的絕對值。手動計算絕對值,適用於簡單的整數。
