Python 返回对象 "placement" 而不是 float
Python returning object "placement" instead of float
我正在创建一个用于评估股票价值的网络抓取工具。我遇到的问题是我的代码 returns 一个对象 "placement" (不知道应该叫什么)而不是值。
import requests
class Guru():
MedianPE = 0.0
def __init__(self, ticket):
self.ticket = ticket
try:
url = ("https://www.gurufocus.com/term/pettm/"+ticket+"/PE-Ratio-TTM/")
response = requests.get(url)
htmlText = response.text
firstSplit = htmlText
secondSplit = firstSplit.split("And the <strong>median</strong> was <strong>")[1]
thirdSplit = secondSplit.split("</strong>")[0]
lastSplit = float(thirdSplit)
try:
Guru.MedianPE = lastSplit
except:
print(ticket + ": Median PE N/A")
except:
print(ticket + ": Median PE N/A")
def getMedianPE(self):
return float(Guru.getMedianPE)
g1 = Guru("AAPL")
g1.getMedianPE
print("Median + " + str(g1))
如果我在 __init__
中打印 lastSplit
它 returns 我想要的值 15.53
但是当我尝试通过函数 getMedianPE
我刚刚得到 Median + <__main__.Guru object at 0x0000016B0760D288>
非常感谢您的宝贵时间!
您似乎在尝试将函数对象转换为浮点数。只需将 return float(Guru.getMedianPE)
更改为 return float(Guru.MedianPE)
getMedianPE
是一个函数(在class的一部分时也称为对象方法),所以你需要用括号调用它。如果你不带括号调用它,你会得到 method/function 本身而不是调用 method/function.
的结果
另一个问题是 getMedianPE
returns 函数 Guru.getMedianPE
而不是值 Guru.MedianPE
。我认为您不希望 MedianPE 成为 class 变量 - 您可能只想在 init 中将其设置为默认值 0,以便每个对象都有自己的 median_PE值。
此外,在您的 init 方法中包含所有抓取代码也不是一个好主意。应该将其移至您在实例化对象后调用的 scrape() 方法(或其他名称)。
最后,如果你要打印一个对象,有一个str方法很有用,所以我在这里添加了一个基本的。
因此,将所有这些评论放在一起,这里是建议的代码重构。
import requests
class Guru():
def __init__(self, ticket, median_PE=0):
self.ticket = ticket
self.median_PE = median_PE
def __str__(self):
return f'{self.ticket} {self.median_PE}'
def scrape(self):
try:
url = f"https://www.gurufocus.com/term/pettm/{self.ticket}/PE-Ratio-TTM/"
response = requests.get(url)
htmlText = response.text
firstSplit = htmlText
secondSplit = firstSplit.split("And the <strong>median</strong> was <strong>")[1]
thirdSplit = secondSplit.split("</strong>")[0]
lastSplit = float(thirdSplit)
self.median_PE = lastSplit
except ValueError:
print(f"{self.ticket}: Median PE N/A")
然后你运行代码
>>>g1 = Guru("AAPL")
...g1.scrape()
...print(g1)
AAPL 15.53
我正在创建一个用于评估股票价值的网络抓取工具。我遇到的问题是我的代码 returns 一个对象 "placement" (不知道应该叫什么)而不是值。
import requests
class Guru():
MedianPE = 0.0
def __init__(self, ticket):
self.ticket = ticket
try:
url = ("https://www.gurufocus.com/term/pettm/"+ticket+"/PE-Ratio-TTM/")
response = requests.get(url)
htmlText = response.text
firstSplit = htmlText
secondSplit = firstSplit.split("And the <strong>median</strong> was <strong>")[1]
thirdSplit = secondSplit.split("</strong>")[0]
lastSplit = float(thirdSplit)
try:
Guru.MedianPE = lastSplit
except:
print(ticket + ": Median PE N/A")
except:
print(ticket + ": Median PE N/A")
def getMedianPE(self):
return float(Guru.getMedianPE)
g1 = Guru("AAPL")
g1.getMedianPE
print("Median + " + str(g1))
如果我在 __init__
中打印 lastSplit
它 returns 我想要的值 15.53
但是当我尝试通过函数 getMedianPE
我刚刚得到 Median + <__main__.Guru object at 0x0000016B0760D288>
非常感谢您的宝贵时间!
您似乎在尝试将函数对象转换为浮点数。只需将 return float(Guru.getMedianPE)
更改为 return float(Guru.MedianPE)
getMedianPE
是一个函数(在class的一部分时也称为对象方法),所以你需要用括号调用它。如果你不带括号调用它,你会得到 method/function 本身而不是调用 method/function.
另一个问题是 getMedianPE
returns 函数 Guru.getMedianPE
而不是值 Guru.MedianPE
。我认为您不希望 MedianPE 成为 class 变量 - 您可能只想在 init 中将其设置为默认值 0,以便每个对象都有自己的 median_PE值。
此外,在您的 init 方法中包含所有抓取代码也不是一个好主意。应该将其移至您在实例化对象后调用的 scrape() 方法(或其他名称)。
最后,如果你要打印一个对象,有一个str方法很有用,所以我在这里添加了一个基本的。
因此,将所有这些评论放在一起,这里是建议的代码重构。
import requests
class Guru():
def __init__(self, ticket, median_PE=0):
self.ticket = ticket
self.median_PE = median_PE
def __str__(self):
return f'{self.ticket} {self.median_PE}'
def scrape(self):
try:
url = f"https://www.gurufocus.com/term/pettm/{self.ticket}/PE-Ratio-TTM/"
response = requests.get(url)
htmlText = response.text
firstSplit = htmlText
secondSplit = firstSplit.split("And the <strong>median</strong> was <strong>")[1]
thirdSplit = secondSplit.split("</strong>")[0]
lastSplit = float(thirdSplit)
self.median_PE = lastSplit
except ValueError:
print(f"{self.ticket}: Median PE N/A")
然后你运行代码
>>>g1 = Guru("AAPL")
...g1.scrape()
...print(g1)
AAPL 15.53