[解決済み] AttributeError: 'NoneType' オブジェクトには 'lower' 属性がない python
2022-02-06 09:29:10
質問
私のabc.txtfileは次のようになります。
Mary Kom 28 F
Emon Chatterje 32 M
Sunil Singh 35 M
今、私は次のトレースバックで望ましい結果を得ています:私を助けてください。私はどこに間違っているのかを得ることはありません
Enter for Search Criteria
1.FirstName 2.LastName 3.Age 4.Gender 5.Exit 1
Enter FirstName :m
Mary Kom 28 F
Emon Chatterje 32 M
Traceback (most recent call last):
File "testcode.py", line 50, in <module>
if (records.searchFName(StringSearch)):
File "testcode.py", line 12, in searchFName
return matchString.lower() in self.fname.lower()
AttributeError: 'NoneType' object has no attribute 'lower'
私のコード
#!usr/bin/python
import sys
class Person:
def __init__(self, firstname=None, lastname=None, age=None, gender=None):
self.fname = firstname
self.lname = lastname
self.age = age
self.gender = gender
def searchFName(self, matchString):
return matchString.lower() in self.fname.lower()
def searchLName(self, matchString):
return matchString.lower() in self.lname.lower()
def searchAge(self, matchString):
return str(matchString) in self.age
def searchGender(self, matchString):
return matchString.lower() in self.gender.lower()
def display(self):
print self.fname, self.lname, self.age, self.gender
f= open("abc","r")
list_of_records = [Person(*line.split()) for line in f]
f.close()
found = False
n=0
n1 = raw_input("Enter for Search Criteria\n1.FirstName 2.LastName 3.Age 4.Gender 5.Exit " )
if n1.isdigit():
n = int(n1)
else:
print "Enter Integer from given"
sys.exit(1)
if n == 0 or n>5:
print "Enter valid search "
if n == 1:
StringSearch = raw_input("Enter FirstName :")
for records in list_of_records:
if (records.searchFName(StringSearch)):
found = True
records.display()
if not found:
print "No matched record"
if n == 2:
StringSearch = raw_input("Enter LastName :")
for records in list_of_records:
if records.searchLName(StringSearch):
found = True
records.display()
if not found:
print "No matched record"
if n == 3:
StringSearch = raw_input("Enter Age :")
if (StringSearch.isdigit()):
StringSearch1 = int(StringSearch)
else:
print "Enter Integer"
sys.exit()
for records in list_of_records:
if records.searchAge(StringSearch):
found = True
records.display()
if not found:
print "No matched record"
if n == 4:
StringSearch = raw_input("Enter Gender(M/F) :")
for records in list_of_records:
if records.searchGender(StringSearch):
found = True
records.display()
if not found:
print "No matched record"
if n == 5:
sys.exit(1)
私はどこで間違っているのか、私の問題を解決するのを助けてください?
解決方法は?
あなたは
Person()
クラスで
firstname
. ファイル内の空行から作成したのですね。
list_of_records = [Person(*line.split()) for line in f]
空行は空リストとなります。
>>> '\n'.split()
[]
につながる。
Person(*[])
が呼び出されるので
Person()
インスタンスが引数なしで作成され、デフォルトの
firstname=None
.
空行をスキップします。
list_of_records = [Person(*line.split()) for line in f if line.strip()]
また、空文字列をデフォルトにしたり、特に
None
の値は、属性を文字列として処理する前に使用されます。
def searchFName(self, matchString):
return bool(self.fname) and matchString.lower() in self.fname.lower()
ここで
bool(self.fname)
を返します。
False
は空の場合、または
None
の値で、素早く
False
は、マッチするファーストネームがない場合に返される値です。
>>> p = Person()
>>> p.fname is None
True
>>> p.searchFName('foo')
False
関連
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】AttributeError: 'module'オブジェクトには属性がありません。
-
[解決済み] Pythonで、あるオブジェクトが反復可能かどうかを判断するにはどうしたらいいですか?
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み] Pythonでnullオブジェクトを参照する
-
[解決済み] Pythonのオブジェクトが持っているメソッドを検索する
-
[解決済み] PythonでNoneTypeを "テスト "する方法は?
-
[解決済み] エラーです。" 'dict' オブジェクトには 'iteritems' という属性がありません "
-
[解決済み] AttributeError: 'NoneType' オブジェクトには 'something' という属性がありません」と表示されるのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
PythonはWordの読み書きの変更操作を実装している
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない