1. 簡介
在使用 Python 進行程式設計時,資料的型別轉換是一項非常重要的技巧。特別是將字串與數值之間互相轉換的能力,對於資料輸入、輸出與數值計算處理來說都是不可或缺的。例如,當使用者在表單中輸入字串時,需要將其轉換為數值進行計算,或是將計算結果轉換為字串以便顯示,這些情況經常會出現。
然而,如果混用不同型別的資料,就可能會導致錯誤,這對於 Python 初學者來說需要特別注意。本文將介紹如何在 Python 中進行「字串轉數值」、「數值轉字串」的轉換,並透過實用範例詳細說明錯誤處理與特殊情況的應對方式。希望能幫助你從基礎到進階,掌握 Python 編程中必要的型別轉換技巧。
在接下來的章節中,我們將更詳細地說明 Python 中基本的型別轉換方法。
2. Python 的基本型別轉換
在 Python 中,不同型別的資料通常無法直接進行操作,因此在不同型別之間進行資料轉換是必要的。理解如何將字串轉換為數值,或將數值轉換為字串,將有助於你撰寫更靈活、錯誤更少的程式碼。本章節將說明如何使用 Python 的 int()
和 float()
函數進行基本的型別轉換。
轉換為整數
當數值是以字串形式輸入時,若要在 Python 中進行數學運算,就必須先將該字串轉換為整數或浮點數。例如,要將字串 “42” 轉換為整數 42
,可以使用以下方式:
str_number = "42"
int_number = int(str_number)
print(int_number) # 輸出: 42
使用 int()
函數即可將字串成功轉換為整數,轉換成功後即可作為數值使用。需要注意的是,如果字串中包含小數點(如 "42.0"
),則在轉換為整數時會發生錯誤。整數轉換僅適用於純整數值,若包含小數,則應使用 float()
函數。
轉換為浮點數
浮點數是一種可以保留小數部分的數值型別。在 Python 中,可以使用 float()
函數將字串轉換為浮點數。例如,要將字串 “3.14” 轉換為浮點數,可以使用以下程式碼:
str_float = "3.14"
float_number = float(str_float)
print(float_number) # 輸出: 3.14
透過 float()
函數可以將字串成功轉換為浮點數。此外,float()
也支援科學記號的轉換,例如 "1.23e-4"
。
str_exp = "1.23e-4"
float_exp = float(str_exp)
print(float_exp) # 輸出: 0.000123
數值轉換為字串
在某些情況下,也會需要將數值轉換為字串,例如與其他字串結合並顯示時。此時可以使用 str()
函數。
num = 42
str_num = str(num)
print("數值轉換為字串的結果: " + str_num) # 輸出: 數值轉換為字串的結果: 42
使用 str()
函數可將數值轉換為字串,使得包含數值的字串操作變得可能。
當你理解了這些基本的型別轉換之後,我們將進一步介紹進位轉換與全形數字的處理方式。

3. 應用範例:進位制與全形數字的轉換
在了解了 Python 的基本型別轉換後,接下來我們將說明一些進階的應用情境。本節將介紹如何處理二進位、十六進位等進位制的轉換方法,以及如何處理包含全形數字的字串。
二進位、八進位與十六進位的轉換
Python 的 int()
函數不僅能處理十進位字串,也能將二進位、八進位或十六進位的字串轉換為整數。你只需在 int()
函數中指定第二個參數來表示基數(進位)。例如,以下程式碼會將二進位與十六進位字串轉換為整數:
binary_str = "1010" # 二進位字串
octal_str = "12" # 八進位字串
hex_str = "a" # 十六進位字串
int_binary = int(binary_str, 2)
int_octal = int(octal_str, 8)
int_hex = int(hex_str, 16)
print(int_binary) # 輸出: 10
print(int_octal) # 輸出: 10
print(int_hex) # 輸出: 10
如上所示,透過指定不同的進位參數,int()
函數即可正確地將不同進位制的字串轉換為整數。這對於需要處理多種進位資料的情況特別實用。
全形數字與特殊字元的處理
當使用者輸入的字串中包含全形數字或特殊字元時,直接使用 Python 進行轉換可能會產生錯誤。尤其是在輸入日文或中文數字時,全形字符常常導致解析失敗。因此,建議先使用 replace()
或 translate()
方法將全形字元轉換為半形。
以下範例示範如何先將全形數字轉換為半形,再進行數值轉換:
str_num_fullwidth = "12345"
str_num_halfwidth = str_num_fullwidth.translate(str.maketrans('0123456789', '0123456789'))
print(int(str_num_halfwidth)) # 輸出: 12345
這種方式可讓包含全形數字的字串順利轉換為整數。如果包含小數點的全形字元,也需要一併進行轉換,例如:
str_float_fullwidth = "123.456"
str_float_halfwidth = str_float_fullwidth.translate(str.maketrans('0123456789.', '0123456789.'))
print(float(str_float_halfwidth)) # 輸出: 123.456
漢字數字的轉換
在 Python 中,使用 unicodedata
模組可以將部分漢字數字轉換為數值。透過 unicodedata.numeric()
函數,你可以將「一」、「百」這類文字轉換為浮點數。
import unicodedata
kanji_num = '五'
converted_num = unicodedata.numeric(kanji_num)
print(converted_num) # 輸出: 5.0
不過,這種方法僅適用於單一漢字。對於像「十五」這種包含多個漢字的數字,就需要更複雜的處理,建議使用額外的函式庫或正規表達式進行擴充處理。
如你所見,Python 提供了多樣的方式來處理數值相關的字串。接下來,我們將說明如何判斷輸入是否可被正確轉換,並介紹錯誤處理的技巧。
4. 錯誤處理與輸入驗證
在資料處理過程中,使用者或外部來源提供的資料可能無法順利轉換為數值。因此,在轉換之前判斷資料是否符合格式,以及在轉換失敗時進行妥善的錯誤處理,是非常重要的。本節將介紹如何驗證輸入並處理轉換錯誤。
使用 isdigit()
與正規表達式進行數字判斷
若想判斷某個字串是否能轉換為數值,可以使用 Python 的 isdigit()
方法或正規表達式。isdigit()
會在字串完全由數字組成時回傳 True,但若包含小數點或負號則回傳 False,因此僅適用於整數的判斷。
def is_integer(input_str):
return input_str.isdigit()
# 使用範例
print(is_integer("123")) # 輸出: True
print(is_integer("3.14")) # 輸出: False
print(is_integer("-123")) # 輸出: False
若需判斷浮點數或負數,建議使用正規表達式會更靈活。以下範例可以處理包含「+」、「-」、小數點的數字判斷:
import re
def is_numeric(input_str):
return bool(re.match(r'^[+-]?\d+(\.\d+)?$', input_str))
# 使用範例
print(is_numeric("123")) # 輸出: True
print(is_numeric("-123.45")) # 輸出: True
print(is_numeric("3.14.15")) # 輸出: False
print(is_numeric("abc")) # 輸出: False
透過正規表達式,你可以更彈性地處理各種格式的數值判斷,對於處理複雜輸入特別有幫助。
錯誤處理:使用例外處理機制
在 Python 中,如果嘗試將無效的字串轉換為數值,會觸發 ValueError
錯誤。為了避免程式中斷,通常會使用 try-except
區塊來進行例外處理。
以下是範例:當無法將某個字串轉換為整數時,會顯示錯誤訊息,但不會讓程式終止。
def convert_to_int(input_str):
try:
return int(input_str)
except ValueError:
print(f"Error: '{input_str}' 無法轉換為整數。")
return None
# 使用範例
print(convert_to_int("123")) # 輸出: 123
print(convert_to_int("abc")) # 輸出: Error: 'abc' 無法轉換為整數。
透過加入例外處理,即使遇到錯誤也能讓程式繼續執行,提升穩定性。同時也能給使用者清楚的回饋訊息,便於修正輸入錯誤。
當你的輸入驗證與錯誤處理機制完善時,程式的可靠性將大幅提升。下一節,我們將說明如何一次性轉換整個列表中的元素。

5. 批次轉換列表中的元素
在處理資料時,有時需要將由字串組成的列表元素一次性轉換為數值。例如,來自 CSV 檔案或外部來源的資料通常會以字串儲存。本節將介紹如何使用 Python 的列表生成式(List Comprehension)來進行批次轉換。
使用列表生成式進行批次轉換
在 Python 中,除了可以使用迴圈逐一處理列表元素外,也可以透過列表生成式,簡潔且高效地轉換資料。這種寫法會針對每個元素執行特定操作,並產生一個新的列表。
例如,將包含字串數字的列表轉換為整數列表,可以使用以下程式碼:
str_list = ["10", "20", "30", "40", "50"]
int_list = [int(i) for i in str_list]
print(int_list) # 輸出: [10, 20, 30, 40, 50]
上述程式碼中的 [int(i) for i in str_list]
會對 str_list
中的每個元素使用 int()
轉換為整數,並建立新的 int_list
。此方法讓你能用簡潔的語法處理大量資料,提升程式的可讀性與效能。
加入錯誤處理的批次轉換
當列表中包含無法轉換為數字的資料(如文字或特殊字元)時,轉換過程會發生錯誤。此時可以在轉換邏輯中加入條件或例外處理,以避免整個轉換中斷。以下範例示範如何只轉換可轉換的元素:
str_list = ["10", "20", "abc", "30", "40"]
int_list = []
for i in str_list:
try:
int_list.append(int(i))
except ValueError:
print(f"Warning: '{i}' 無法轉換為整數。")
print(int_list) # 輸出: [10, 20, 30, 40]
此程式使用 try-except
區塊將每個元素轉換為整數,若發生錯誤則顯示警告並略過該元素。透過 append()
方法,僅將成功轉換的元素加入 int_list
。這樣即使列表中有錯誤資料,也能持續處理並得到有效的轉換結果。
批次轉換是處理大量資料時非常實用的技巧。接下來,我們將總結整篇文章的重點,幫助你複習所學內容。
6. 總結
在本篇文章中,我們從基本到進階,說明了如何在 Python 中進行「字串轉數值」、「數值轉字串」的資料型別轉換。透過掌握這些轉換方法,你可以更靈活地處理各種資料,大幅提升程式設計的效率與穩定性。以下是各章節的重點整理:
內容回顧
- 簡介
- 說明了在數值運算與資料顯示中,進行字串與數值間的型別轉換有多麼重要。
- Python 的基本型別轉換
- 介紹了使用
int()
、float()
與str()
進行基本的資料型別轉換。
- 應用範例:進位制與全形數字的轉換
- 說明如何處理二進位、八進位、十六進位的轉換,全形數字的半形化,以及使用
unicodedata.numeric()
將漢字轉為數值。
- 錯誤處理與輸入驗證
- 介紹了如何使用
isdigit()
與正則表達式判斷是否為數字,並透過try-except
處理轉換錯誤。
- 批次轉換列表中的元素
- 學會使用列表生成式進行高效的批次轉換,以及加入錯誤處理以因應例外情況。
未來應用
型別轉換是 Python 中資料處理的基礎能力之一。實際開發中,正確運用這些轉換技巧與錯誤處理方式,不僅可以減少 Bug 發生,還能讓你的程式碼更穩定、更易維護。隨著你逐步掌握這些方法,也能進一步學習更進階的資料處理技巧,處理更複雜的應用情境。
希望透過本篇文章,你已經具備了使用 Python 進行資料型別轉換所需的知識與技能,並能將其應用於未來的專案與學習之中!