gpt4 book ai didi

python - 属性错误 : 'NoneType' object has no attribute 'lower' python

转载 作者:行者123 更新时间:2023-11-28 21:22:17 24 4
gpt4 key购买 nike

我的 abc.txt 文件是这样的

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)

请帮助解决我的问题,我哪里出错了??

最佳答案

您有一个没有firstnamePerson() 类。您是从文件中的空行创建的:

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

关于python - 属性错误 : 'NoneType' object has no attribute 'lower' python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19537520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com