python 文字列を数値へ変換する際の例外処理-

 

pythonでの数値型というのはどのようなものがあるのでしょうか?


Javaでプリミティブなら int, fload , double, longなどがありますが・・・


参照型であれば、Integerというのもあったでしょうか?


pythonでStringを数値を表す型へ変換する場合、

参照型に変換されるのでしょうか?


変換する対象の文字列が数値を表していない場合、

なんらかのexceptionを raiseするのでしょうか?



Pythonでは数値型として以下の種類があります。

Javaのプリミティブ型や参照型と比較すると、

Pythonではすべてがオブジェクトとして扱われます。


---


### **Pythonの数値型**


1. **int**


   - 整数を表す型です。

   

   - サイズに制限がなく、非常に大きな値も扱えます

   (Javaの`int`や`long`のように範囲制限がありません)。


2. **float**


   - 浮動小数点数を表す型です。

   

   - Javaの`float`や`double`に相当しますが、

通常の精度はC言語の`double`と同程度(64ビット)です。


3. **complex**


   - 複素数を表す型です。実数部分と虚数部分を持ちます。

   

   - 例: `3 + 4j`


---


### **文字列から数値型への変換**


Pythonで文字列を数値に変換するには、以下の関数を使用します:


1. **整数に変換: `int()`**


   - 例: `int("123")` → `123`


   - 変換対象の文字列が数値でない場合、`ValueError`を発生させます。


   - 例:

     ```python

 

     int("abc")  

     # ValueError: invalid literal for int() with base 10: 'abc'

```


2. **浮動小数点数に変換: `float()`**


   - 例: `float("123.45")` → `123.45`

   

   - 変換対象の文字列が数値でない場合、`ValueError`を発生させます。

   

   - 例:

   

     ```python

 

     float("abc")  

# ValueError: could not convert string to float: 'abc'

     ```


3. **複素数に変換: `complex()`**


   - 例: `complex("1+2j")` → `(1+2j)`

   

   - 不適切な形式の場合、`ValueError`を発生させます。


---


### **Pythonの数値型とJavaの違い**


- **プリミティブ型がない**:


  - Javaでは`int`はプリミティブ型、

`Integer`は参照型として区別されますが、

Pythonではすべてがオブジェクトとして扱われます。


  - 例: `123`は`int`型のオブジェクトです。


- **型変換がシームレス**:


  - Pythonでは`int`と`float`の間での演算や型変換がシームレスに行われます。

  

  - 例:

  

    ```python

    a = 10  # int型

    b = 3.14  # float型

    c = a + b  # cはfloat型で13.14

    ```


---


### **文字列変換時の例外処理**


数値変換時に例外を適切に処理するには、

`try`/`except`を使います。


#### **例: 整数変換**


```python


def convert_to_int(s):


    try:

        return int(s)

    except ValueError:

        print(f"変換できません: {s}")

        return None


# 123

print(convert_to_int("123"))  


# 変換できません: abc → None

print(convert_to_int("abc"))  


```


#### **例: 浮動小数点数変換**


```python


def convert_to_float(s):


    try:

        return float(s)

    except ValueError:

        print(f"変換できません: {s}")

        return None


# 123.45

print(convert_to_float("123.45"))

  

# 変換できません: xyz → None

print(convert_to_float("xyz"))  

```


---


### **補足: 変換前のチェック**


数値変換前に文字列が数値を表しているか確認するには、

`str.isdigit()`や正規表現を使用します。


#### **整数の場合**


```python


s = "123"


if s.isdigit():

# 123

    print(int(s))  

else:


    print("数値ではありません")

```


#### **浮動小数点数の場合(正規表現を使用)**


```python


import re


def is_float(s):

    return bool(re.match(r"^-?\d+(\.\d+)?$", s))


s = "123.45"


if is_float(s):


    print(float(s))  # 123.45

else:


    print("浮動小数点数ではありません")

```


---



Pythonでは例外処理を活用しながら柔軟に型変換を行うことができます。

数値型の違いに慣れると、

Javaよりもシンプルに感じられるかもしれません!



コメント