Jadual Kandungan
Kandungan soalan
Penyelesaian
Rumah pembangunan bahagian belakang Golang Adakah selamat untuk mengandaikan bahawa sebarang ralat yang dikembalikan daripada fungsi strconv.Parse* mestilah disebabkan oleh data input yang buruk?

Adakah selamat untuk mengandaikan bahawa sebarang ralat yang dikembalikan daripada fungsi strconv.Parse* mestilah disebabkan oleh data input yang buruk?

Feb 15, 2024 am 11:30 AM
perpustakaan standard

可以安全地假设从 strconv.Parse* 函数返回的任何错误一定是由于错误的输入数据造成的吗?

Adakah selamat untuk mengandaikan bahawa sebarang ralat yang dikembalikan daripada fungsi strconv.Parse mestilah disebabkan oleh data input yang buruk? Soalan ini melibatkan pemahaman tentang pengendalian ralat fungsi strconv.Parse. Biasanya, ralat yang dikembalikan oleh fungsi strconv.Parse memang disebabkan oleh data input yang tidak berada dalam format yang diharapkan. Walau bagaimanapun, terdapat beberapa keadaan khusus yang perlu dipertimbangkan. Sesetengah ralat mungkin disebabkan oleh jenis data input yang salah, seperti semasa menukar rentetan kepada integer dan rentetan mengandungi aksara bukan angka. Selain itu, terdapat kes tepi, seperti limpahan integer atau kehilangan ketepatan titik terapung, yang juga boleh mengakibatkan nilai pulangan yang salah. Oleh itu, untuk ralat yang dikembalikan daripada fungsi strconv.Parse, kita tidak boleh mengandaikan sepenuhnya bahawa ia disebabkan oleh data input yang salah, tetapi perlu mempertimbangkan faktor lain yang mungkin.

Kandungan soalan

Dalam semakan kod baru-baru ini, penyemak bertanya kepada saya cara saya mengendalikan ralat daripada strconv.ParseUint() 返回的错误提出了疑问。该函数被记录为返回转换后的 uint 值和 *strconv.NumError 具体类型的错误。文档提到了可以返回的该类型的两个哨兵错误(ErrSyntaxErrRange), yang kedua-duanya bermakna ia diberi data yang salah. Bergantung pada antara muka fungsi, sebarang ralat lain juga mungkin berlaku.

Untuk kes penggunaan saya, saya perlu tahu sama ada nilai rentetan yang saya ada berbaloi untuk ditukar kepada uint. Ralat jika ParseUint 返回错误,并且它是哨兵错误之一,那么我得到了答案。但如果返回的错误不是这些,那么我返回它并停止执行。我的审阅者断言,我应该假设从 ParseUint 返回的任何错误意味着我给了它错误的数据,并且不需要检查哨兵错误,没有理由检查哨兵错误,也不会返回该错误(在我的用例中)。他们链接到 go 标准库中的一个示例,其中来自 ParseUint dianggap sebagai semakan untuk data input yang buruk dan tidak pernah dikembalikan, menunjukkan bahawa terdapat banyak contoh perkara ini.

Walaupun saya pasti faham bahawa mesti ada algoritma yang sentiasa boleh mengira hasil yang diingini berdasarkan data yang baik dan sumber yang mencukupi, dunia sebenar tidak selalunya sepadan dengan ideal teori. Saya tidak dapat mencari apa-apa dalam dokumentasi perpustakaan yang menunjukkan bahawa ia tidak dan tidak akan mengembalikan ralat atas sebarang sebab selain daripada data yang buruk. Perpustakaan standard mempunyai satu atau mungkin banyak contoh perkara ini, yang meyakinkan di satu pihak dan menakutkan di pihak yang lain, di antara "dua kesalahan tidak menjadi betul" dan "mereka melakukannya dengan cara ini, jadi ia mesti selamat untuk kita Perkara yang sama dilakukan dalam kes ini.

Adakah ini hanya kes dokumentasi perpustakaan kehilangan ayat? Atau adakah baik untuk mengembalikan ralat apabila ia bukan salah satu daripada dua ralat ini? Bagaimana saya harus membuat alasan?

Penyelesaian

Ya, adalah selamat untuk mengandaikan bahawa ralat dalam fungsi strconv.ParseXXX adalah disebabkan oleh data input yang buruk.

Dari halaman dokumentasi yang anda nyatakan:

Cara saya membaca ini ialah "sebarang ralat dalam strconv.ParseXXX adalah NumError dan mungkin disebabkan oleh nombor tidak sah atau ralat julat saiz bit". Pemahaman saya ialah godocs cuba menggariskan selengkap mungkin skop yang dijangkakan bagi panggilan fungsi.

Jadi saya rasa selamat untuk menganggap bahawa ini adalah strconv.ParseXXXhanya ralat yang mungkin anda lihat dikembalikan daripada fungsi . Jika sesuatu yang lain kembali, saya akan menganggapnya sebagai pepijat dokumentasi.

Untuk menjawab soalan terakhir anda: corak yang anda perhatikan semasa memanggil fungsi ini daripada perpustakaan standard adalah betul. Kembalikan keseluruhan ralat dan biarkan pemanggil memutuskan perkara yang perlu dilakukan dengannya. Ralat sentinel direka untuk membantu anda memahami perkara yang salah dan mewakili rangkaian penuh ralat yang boleh berlaku dengan fungsi ini.

Atas ialah kandungan terperinci Adakah selamat untuk mengandaikan bahawa sebarang ralat yang dikembalikan daripada fungsi strconv.Parse* mestilah disebabkan oleh data input yang buruk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menggunakan nilai mutlak dalam c++ Bagaimana untuk menggunakan nilai mutlak dalam c++ May 06, 2024 pm 06:15 PM

Terdapat dua cara untuk mendapatkan nilai mutlak dalam C++: 1. Gunakan fungsi terbina dalam abs() untuk mendapatkan nilai mutlak jenis integer atau titik terapung 2. Gunakan fungsi generik std::abs() untuk mendapatkan pelbagai nilai mutlak yang disokong Beroperasi pada nilai mutlak jenis data.

_penggunaan kompleks dalam bahasa c _penggunaan kompleks dalam bahasa c May 08, 2024 pm 01:27 PM

Jenis kompleks digunakan untuk mewakili nombor kompleks dalam bahasa C, termasuk bahagian nyata dan khayalan. Bentuk permulaannya ialah complex_number = 3.14 + 2.71i, bahagian sebenar boleh diakses melalui kreal(complex_number), dan bahagian khayalan boleh diakses melalui cimag(complex_number). Jenis ini menyokong operasi matematik biasa seperti penambahan, penolakan, pendaraban, pembahagian dan modulo. Di samping itu, satu set fungsi untuk bekerja dengan nombor kompleks disediakan, seperti cpow, csqrt, cexp dan csin.

Apakah maksud perdana dalam c++ Apakah maksud perdana dalam c++ May 07, 2024 pm 11:33 PM

prime ialah kata kunci dalam C++, yang menunjukkan jenis nombor perdana, yang hanya boleh dibahagikan dengan 1 dan dirinya sendiri Ia digunakan sebagai jenis Boolean untuk menunjukkan sama ada nilai yang diberikan ialah nombor perdana, ia adalah benar, jika tidak ia palsu.

Cara menggunakan std:: dalam c++ Cara menggunakan std:: dalam c++ May 09, 2024 am 03:45 AM

std ialah ruang nama dalam C++ yang mengandungi komponen perpustakaan standard. Untuk menggunakan std, gunakan pernyataan "menggunakan ruang nama std;". Menggunakan simbol terus dari ruang nama std boleh memudahkan kod anda, tetapi disyorkan hanya apabila diperlukan untuk mengelakkan pencemaran ruang nama.

Apakah maksud fabs dalam c++ Apakah maksud fabs dalam c++ May 08, 2024 am 01:15 AM

Fungsi fabs() ialah fungsi matematik dalam C++ yang mengira nilai mutlak nombor titik terapung, membuang tanda negatif dan mengembalikan nilai positif. Ia menerima parameter titik terapung dan mengembalikan nilai mutlak jenis berganda. Sebagai contoh, fabs(-5.5) mengembalikan 5.5. Fungsi ini berfungsi dengan nombor titik terapung, yang ketepatannya dipengaruhi oleh perkakasan asas.

Apakah maksud konfigurasi dalam java? Apakah maksud konfigurasi dalam java? May 07, 2024 am 02:39 AM

Config mewakili maklumat konfigurasi dalam Java dan digunakan untuk melaraskan tingkah laku aplikasi Ia biasanya disimpan dalam fail luaran atau pangkalan data dan boleh diuruskan melalui Java Properties, PropertyResourceBundle, Java Configuration Framework atau pustaka pihak ketiga. kesedaran alam sekitar, kebolehurusan, skalabiliti.

Bagaimana untuk mengira nilai mutlak dalam c++ Bagaimana untuk mengira nilai mutlak dalam c++ May 06, 2024 pm 06:21 PM

Terdapat tiga cara untuk mencari nilai mutlak dalam C++: Menggunakan fungsi abs(), anda boleh mengira nilai mutlak sebarang jenis nombor. Menggunakan fungsi std::abs(), anda boleh mengira nilai mutlak integer, nombor titik terapung dan nombor kompleks. Pengiraan manual nilai mutlak, sesuai untuk integer mudah.

Apakah maksud min dalam c++ Apakah maksud min dalam c++ May 08, 2024 am 12:51 AM

Fungsi min dalam C++ mengembalikan minimum berbilang nilai. Sintaksnya ialah: min(a, b), dengan a dan b ialah nilai yang hendak dibandingkan. Anda juga boleh menentukan fungsi perbandingan untuk menyokong jenis yang tidak menyokong operator <. C++20 memperkenalkan fungsi std::clamp, yang mengendalikan minimum tiga atau lebih nilai.

See all articles