こんにちはPyQサポートです。
今回はTypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
というエラーの意味と考えられる原因を紹介します。
- 質問
- 回答
- TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'の解説
- 類似エラーの紹介
- その他のTypeError
質問
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
というエラーメッセージはint()に対して何をした結果でしょうか?
入力した内容(コード)
int(["0", "1", "2"])
出たエラー(実行結果)
Traceback (most recent call last): File "typeerror/01.py", line 1, in <module> int(["0", "1", "2"]) TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
回答
int()
関数にリストを渡した時に表示されるエラーです。
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'の解説
int()
関数は、文字列、bytes-like オブジェクト、数値を渡すことができます。
リストの要素をそれぞれ数値にしたい場合に、今回のようにリストをそのままint()
に渡すことはできません。
それでは、リスト内の要素を数値に変換する場合はどのようにするのがよいでしょうか。ここに一例を紹介します。
リスト内の要素を数値に変換する、int()関数の使い方
[int(num) for num in ["0", "1", "2"]]
リスト内の要素を全て数値に変換したい場合は、それぞれの要素に int()
で変換する必要があります。
ただし、リストの中に数値に変換できない文字 "a" などがあるとエラーになるので気をつけましょう。
上記の例では「リスト内包表記」を使いました。
リスト内包表記については、詳しくは公式ドキュメントをご確認ください。
5. データ構造 — Python 3.9.4 ドキュメント
PyQでもリスト内包表記について学ぶことができますので、紹介します。
リストのメソッドと内包表記 - Pythonのオンライン学習サービスPyQ(パイキュー)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'が出る時にチェックするといい、よくあるミス
- エラーが出ている関数の、引数の型を確認します
今回紹介したint()
関数の場合は、文字列、bytes-like オブジェクト、数値であるかを確認しましょう。
学習を始めた頃にTypeErrorと遭遇することは、よくあることかと思います。
今回とは異なるTypeErrorをいくつか紹介しますので、ご参照ください。
類似エラーの紹介
Typeerror int() argument must be a string a bytes-like object or a number not 'dict'
int()
関数にdict型を渡したことにより出ているエラーです。
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
int()
関数にNoneを渡したことにより出ているエラーです。
いずれのエラーも、エラーが出ている関数の、引数の型を確認します。この2つの例も、int()
関数に渡せる型ではない型を渡したことによりエラーがでています。
その他のTypeError
TypeError: can only concatenate tuple (not "int") to tuple
このエラーは「タプルとタプル以外(int)を結合しようとしている」ことが原因で発生します。
TypeError: must be str, not int
このエラーは、「int型ではなくstr型でなければなりません」ということを伝えています。
+
記号を利用し、異なる型同士での結合をしようとする時にこのエラーが表示されます。
TypeError: float() argument must be a string or a number, not 'list'
float()
関数にリストを渡した時に表示されるエラーです。
float()
関数は、文字列、数値を渡すことができます。リストをそのままfloat()
関数に渡すことはできないので、エラーが発生しています。