Python AttributeError:实例在_init内没有属性__
我似乎不知道问题出在哪里 错误:Python AttributeError:实例在_init内没有属性__,python,ubuntu-12.04,attributeerror,bitcoin,linux-mint,Python,Ubuntu 12.04,Attributeerror,Bitcoin,Linux Mint,我似乎不知道问题出在哪里 错误: Traceback (most recent call last): File "./miningScreensaver", line 171, in <module> miningScreensaver().loop.run() File "./miningScreensaver", line 81, in __init__ self.rxAddress = self.getRxAddress AttributeError:
Traceback (most recent call last):
File "./miningScreensaver", line 171, in <module>
miningScreensaver().loop.run()
File "./miningScreensaver", line 81, in __init__
self.rxAddress = self.getRxAddress
AttributeError: miningScreensaver instance has no attribute 'getRxAddress'
回溯(最近一次呼叫最后一次):
文件“/miningScreensaver”,第171行,在
miningScreensaver().loop.run()文件
文件“/miningScreensaver”,第81行,在初始化中__
self.rxAddress=self.getRxAddress
AttributeError:miningScreensaver实例没有属性“getRxAddress”
代码:
#!python
类缩小屏幕保护程序:
定义初始化(自):
DBusGMainLoop(将_设置为_default=True)
self.mem='ActiveChanged'
self.dest='org.gnome.ScreenSaver'
self.bus=SessionBus()
self.loop=MainLoop()
self.bus.add_信号_接收器(self.catch、self.mem、self.dest)
self.pipe=“”
#如果您想指定不同的接收地址
#将rx地址更改为所需的rx地址
self.rxAddress=self.getRxAddress()#您有混合的制表符和空格。将编辑器设置为显示空白,您将看到问题所在。使用-tt
选项运行python会有所帮助。您有混合的制表符和空格。将编辑器设置为显示空白,您将看到问题所在。使用-tt
选项运行python会有所帮助。使用“编辑”按钮进行快速检查,可以看出您正在混合制表符和空格
特别是miningScreensaver
的前几个方法用一堆空格缩进,而包括getRxAddress在内的其余方法则用一个制表符缩进。因此,Python认为这些方法是在类之外被定义的,这意味着它们被编译为顶级函数,而不是miningScreensaver
实例的方法
要解决此问题,请解除代码的绑定并手动清理缩进
为了避免将来出现这种情况,请使用更好的文本编辑器,并使用-t
或-tt
标志运行Python,这样它会给您一个关于不一致的选项卡/空间使用的明显错误,而不是试图解析代码并给您一个您无法理解的错误。使用编辑按钮快速检查显示您正在混合选项卡和空间
特别是miningScreensaver
的前几个方法用一堆空格缩进,而包括getRxAddress在内的其余方法则用一个制表符缩进。因此,Python认为这些方法是在类之外被定义的,这意味着它们被编译为顶级函数,而不是miningScreensaver
实例的方法
要解决此问题,请解除代码的绑定并手动清理缩进
为了避免将来出现这种情况,请使用更好的文本编辑器,并使用-t
或-tt
标志运行Python,这样它会在选项卡/空间使用不一致方面给您一个明显的错误,而不是试图解析代码并给您一个您无法理解的错误。您的错误与代码不匹配。自从你犯了那个错误后,你有没有更改代码?重新运行它,看看会发生什么。(另外,强烈建议任何不从任何对象继承的类都从对象继承。否则,您将得到老式的类,这很糟糕。)作为一个与问题无关的注意事项,对ls
命令执行Popen
并解析错误消息必须是我见过的验证文件是否存在的最复杂的方式…检查缩进?getRxAddress
可能是dededented的,因此它是在类之后定义的函数,而不是方法!Python作为linux上的shbang行?这不是一条有用的解释器路径…谢谢你,伙计。这在当时是非常有意义的,我得到了这个错误,只是检查这个错误,而不是用谷歌搜索如何检查python中是否存在文件,我应该知道。你的错误与你的代码不匹配。自从你犯了那个错误后,你有没有更改代码?重新运行它,看看会发生什么。(另外,强烈建议任何不从任何对象继承的类都从对象继承。否则,您将得到老式的类,这很糟糕。)作为一个与问题无关的注意事项,对ls
命令执行Popen
并解析错误消息必须是我见过的验证文件是否存在的最复杂的方式…检查缩进?getRxAddress
可能是dededented的,因此它是在类之后定义的函数,而不是方法!Python作为linux上的shbang行?这不是一条有用的解释器路径…谢谢你,伙计。这在当时是非常有意义的,我得到了这个错误,只是检查这个错误,而不是用谷歌搜索如何检查python中是否存在文件,我应该知道。
#! Python
class miningScreensaver:
def __init__(self):
DBusGMainLoop(set_as_default=True)
self.mem='ActiveChanged'
self.dest='org.gnome.ScreenSaver'
self.bus=SessionBus()
self.loop=MainLoop()
self.bus.add_signal_receiver(self.catch,self.mem,self.dest)
self.pipe = ""
#if you would like to specify a different rx address
# change rxAddress to the desired rx address
self.rxAddress = self.getRxAddress() #<--------------------ERROR HERE line 81
#self.rxaddress = "18X3TEigc6PVTsF9Atx5br7rEXfuZRqXEz"
def catch(self,ssOn):
if ssOn == 1: #Screensaver turned on
self.start()
else: #Screensaver turned off
self.stop()
def start(self):
self.pipe = Popen(["cgminer -o stratum+tcp://stratum.mining.eligius.st:3334 -u " + self.rxAddress + " -p x -I 9"], shell=True)
def stop(self):
self.pipe.kill()
def getRxAddress(self):
#check if bitcoin.conf exists
cmd = "ls $HOME/.bitcoin/bitcoin.conf"
pipe = Popen(cmd,stdout=PIPE,stderr=STDOUT)
pout = pipe.stdout.read()
pout = pout.split()
if pout[len(pout)-5]=='No' and \
pout[len(pout)-4]=='such' and \
pout[len(pout)-3]=='file' and \
pout[len(pout)-2]=='or' and \
pout[len(pout)-1]=='directory\n':
password = self.createBitConf()
else:
#check password
password = self.checkPassword()
#Launch bitcoin-qt -server
Popen(["bitcoin-qt","-server"])
#Access
access = ServiceProxy("http://darkPenguin:"+password+"@127.0.0.1:8332")
#access.getinfo()
return access.listreceivedbyaddress(0)
#access.sendtoaddress("12yBwyDJHABCvohdT8qBTeMJEYDqpXnVYV", 0.01)
def createBitConf(self):
randomPW = self.createRandomPW()
path = expanduser("~") + "/"
defFile = open("bitosbitcoinconf", "r")
newFile = open(path + ".bitcoin/bitcoin.conf","w")
for line in range(1,55):
newFile.write(defFile.readline())
password = "rpcpassword="+randomPW+"\n"
for line in range(56,110):
newFile.write(defFile.readline())
defFile.close()
newFile.close()
return randomPW
def createRandomPW(self):
myrg = random.SystemRandom()
length = 44
alphabet = string.ascii_letters + string.digits
pw = str().join(myrg.choice(alphabet) for _ in range(length))
return pw
def checkPassword(self):
path = expanduser("~") + "/"
bitConfFile = open(path + ".bitcoin/bitcoin.conf","r")
password = bitConfFile.readline(56)
bitConfFile.close()
return password[12:12+44-1] # "rpcpassword="+randomPW+"\n"
miningScreensaver().loop.run()