AI資格ドリル
資格を選ぶ↓

用語比較

isdecimal・isdigit・isnumeric の違い|'²' や '½' で結果が分かれる(Python3基礎)

文字列が数字だけでできているかを調べるメソッドには、isdecimal()、isdigit()、isnumeric() の 3 つがあります。'123' のような普通の数字なら、3 つとも True を返します。

違いが出るのは、上付き文字の '²' や分数の '½' のような文字です。isdecimal() は '²' も '½' も False、isdigit() は '²' だけ True、isnumeric() は両方 True を返します。

このページは、数字かどうかの判定で結果が割れて迷った人向けです。決まりは、Python 公式ドキュメントの組み込み型(文字列メソッドの項)に書かれています。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。

結論

isdecimal()

十進法の数を作れる文字だけ。'123' は True、'²' と '½' は False。

isdigit()

isdecimal() の文字に加え、上付き数字の '²' なども True。'½' は False。

isnumeric()

isdigit() の文字に加え、'½' のような数の性質を持つ文字も True。

違いを表で確認

比較軸isdecimal()isdigit()
'123'isdecimal():Trueisdigit():True、isnumeric():True
'²'(上付きの 2)isdecimal():Falseisdigit():True、isnumeric():True
'½'(分数)isdecimal():False、isdigit():Falseisnumeric():True
'12.5'・'-1'・空文字列3 つとも False小数点・符号・空は数字に含まれない

Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)

試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

'12.5' や '-1' が False になって迷った人

3 つとも、小数点とマイナス記号を数字として扱いません。'12.5' も '-1' も False です。数として読めるかを調べたいなら、float() や int() が例外を起こすかで判断します。

02

isdigit() が True なのに int() が失敗した人

'²' は isdigit() で True ですが、int('²') は ValueError になります。Python 3.9.6 では invalid literal for int() with base 10: '²' でした。int() に渡せる文字かを確かめたいなら、isdecimal() のほうが安全です。

03

全角や他の言語の数字を扱う人

全角の '12' とアラビア・インド数字の '١٢' は 3 つとも True で、int() に渡すとどちらも 12 になります。これらは十進法の数字として扱われます。

具体例で使い分ける

例 1

'²' と '½' の判定

'²' と '½' に対して、isdecimal()、isdigit()、isnumeric() をそれぞれ実行します。

  • 公式ドキュメントは、isdigit() の対象を、十進文字に加えて、互換の上付き数字のように特別な扱いが要る数字と説明しています。'²' はここに入ります。
  • isnumeric() は、さらに分数のような数の値を持つ文字まで含みます。'½' はここだけに入ります。

結論: '²' は False、True、True の順、'½' は False、False、True の順です。Python 3.9.6 で同じ結果を確認しました。

例 2

判定が True でも int() に渡せるとは限らない

s = '²' のとき、s.isdigit() が True なので int(s) を実行します。

  • isdigit() は、十進法の数を作れない文字も数字として数えます。
  • int() は、十進法の数として読める文字列だけを受け付けます。

結論: int('²') は ValueError になります。int() に渡す前の判定には isdecimal() を使うほうが、結果が食い違いません。

問題文から答えを選ぶ手順

  1. 1

    何を数字と認めたいかを決める

    0 から 9 のような十進法の数字だけなら isdecimal()、上付き数字も認めるなら isdigit()、分数まで認めるなら isnumeric() です。

  2. 2

    int() に渡す前の判定かを確かめる

    渡す前の判定なら isdecimal() を選びます。

  3. 3

    符号と小数点を含むかを確かめる

    含むなら 3 つとも使えません。float() を try で囲んで判断します。

試験での見分け方

  • 1isdecimal() の対象は、十進法の数を作れる文字である。
  • 2isdigit() の対象は、isdecimal() の対象に上付き数字などを加えたものである。
  • 3isnumeric() の対象は、isdigit() の対象に分数などを加えたものである。
  • 43 つとも、小数点・符号・空文字列では False になる。

誤答しやすい選択肢

isdigit() が True なら int() に渡せると思う

修正: '²' は isdigit() で True ですが、int() は ValueError になります。

'12.5' や '-1' で True になると思う

修正: 小数点とマイナス記号は数字ではないので、3 つとも False です。

isnumeric() が最も狭いと思う

修正: 最も狭いのは isdecimal()、最も広いのは isnumeric() です。

確認問題

Q1'½'.isnumeric() の結果は何ですか?

答え: True

isnumeric() は分数のような数の値を持つ文字も True にします。isdigit() と isdecimal() は False です。

Q2'²'.isdecimal() の結果は何ですか?

答え: False

isdecimal() は十進法の数を作れる文字だけが対象で、上付きの '²' は含まれません。isdigit() は True です。

Q3'12.5'.isdigit() の結果は何ですか?

答え: False

小数点は数字ではないので、'12.5' は 3 つのメソッドのどれでも False です。

到達チェック

  • 3 つのメソッドが対象にする文字の広さの順を言える
  • '²' と '½' の結果を言える
  • isdigit() が True でも int() が失敗する例を言える
  • '12.5' や '-1' が False になる理由を言える

同じ資格で次に知りたいこと

よくある質問

Qふつうの数字の判定にはどれを使えばよいですか?

A

十進法の数字だけを認めたいなら isdecimal() です。int() に渡す前の判定にも合います。

Qisdecimal() は半角の数字だけですか?

A

半角に限りません。Unicode の分類が Nd(十進数字)の文字が対象で、アラビア・インド数字なども True になります。

Q負の数や小数を判定するにはどうしますか?

A

float() を try で囲み、ValueError が起きるかで判断します。

次に見る比較

執筆: ミナト編集部(運営者情報を見る)