1. ホーム
  2. python

[解決済み] TypeError: 'in <string>' は左オペランドにintではなくstringを要求する。

2022-02-26 14:46:07

質問

非常に基本的なPythonスクリプトで、なぜこのようなエラーが発生するのでしょうか? このエラーは何を意味しているのでしょうか?

エラーです。

Traceback (most recent call last):
  File "cab.py", line 16, in <module>
    if cab in line:
TypeError: 'in <string>' requires string as left operand, not int

スクリプトです。

import re
import sys

#loco = sys.argv[1]
cab = 6176
fileZ = open('cabs.txt')
fileZ = list(set(fileZ))

for line in fileZ:
     if cab in line: 
        IPaddr = (line.strip().split())
        print(IPaddr[4])

解決方法は?

を作成する必要があります。 cab を文字列にする。

cab = '6176'

エラーメッセージにあるように、以下のようなことはできません。 <int> in <string> :

>>> 1 in '123'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'in <string>' requires string as left operand, not int
>>> 

なぜなら 整数 文字列 は全く別のものであり、Pythonは暗黙の型変換を受け入れません ( 暗黙の了解より明示の方がいいんです。 ).

実際、Pythonの のみ を使用することができます。 in 演算子は、左オペランドが文字列型の場合、右オペランドも文字列型になります。

>>> '1' in '123'  # Works!
True
>>>
>>> [] in '123'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'in <string>' requires string as left operand, not list
>>>
>>> 1.0 in '123'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'in <string>' requires string as left operand, not float
>>>
>>> {} in '123'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'in <string>' requires string as left operand, not dict
>>>