名称'self'未在Python中定义(Name 'self' is not Defined in Python)
任何人都可以告诉我我需要做什么来解决“名称'自我'未定义”错误我在下面确定的线上?:
class FulfillWhseOrderAction(object):
def __init__(self, name):
self._action_name = name
self._as = actionlib.SimpleActionServer(self._action_name, pkg_commands.msg.FulfillWhseOrderAction, execute_cb=self.execute_cb)
self._as.start()
# *** ERROR HAPPENING HERE: ***
rospy.loginfo('%s: Executing warehouse order' % self._action_name)
if __name__ == '__main__':
rospy.init_node('node_ReceiveWhseOrder')
FulfillWhseOrderAction(rospy.get_name())
rospy.spin()
Can anyone tell me what I need to do to resolve the "Name 'self' not defined" error I'm getting on the line identified below?:
class FulfillWhseOrderAction(object):
def __init__(self, name):
self._action_name = name
self._as = actionlib.SimpleActionServer(self._action_name, pkg_commands.msg.FulfillWhseOrderAction, execute_cb=self.execute_cb)
self._as.start()
# *** ERROR HAPPENING HERE: ***
rospy.loginfo('%s: Executing warehouse order' % self._action_name)
if __name__ == '__main__':
rospy.init_node('node_ReceiveWhseOrder')
FulfillWhseOrderAction(rospy.get_name())
rospy.spin()
原文:https://stackoverflow.com/questions/20391669
2020-01-06 20:45
满意答案
self是发送到__init__函数的变量(称为对象)。 所以你无法从函数外部访问它。 将错误发生行缩进到函数内部。
class FulfillWhseOrderAction(object):
def __init__(self, name):
self._action_name = name
self._as = actionlib.SimpleActionServer(self._action_name, pkg_commands.msg.FulfillWhseOrderAction, execute_cb=self.execute_cb)
self._as.start()
# *** ERROR HAPPENING HERE: ***
rospy.loginfo('%s: Executing warehouse order' % self._action_name)
if __name__ == '__main__':
rospy.init_node('node_ReceiveWhseOrder')
FulfillWhseOrderAction(rospy.get_name())
rospy.spin()
这样可以解决问题
The self is a variable(call it an object) sent to the __init__ function. So you cannot access it from outside the function. Indent the error occuring line to be inside the function.
class FulfillWhseOrderAction(object):
def __init__(self, name):
self._action_name = name
self._as = actionlib.SimpleActionServer(self._action_name, pkg_commands.msg.FulfillWhseOrderAction, execute_cb=self.execute_cb)
self._as.start()
# *** ERROR HAPPENING HERE: ***
rospy.loginfo('%s: Executing warehouse order' % self._action_name)
if __name__ == '__main__':
rospy.init_node('node_ReceiveWhseOrder')
FulfillWhseOrderAction(rospy.get_name())
rospy.spin()
This will save the problem
2013-12-05
相关问答
在使用它之前定义类: class Something:
def out(self):
print("it works")
s = Something()
s.out()
您需要将self作为第一个参数传递给所有实例方法。 Define the class before you use it: class Something:
def out(self):
print("it works")
s = Something()
s.out()
Yo...
不用担心:)欢迎来到Python! 它正在抛出这个错误,因为它正在寻找一个不存在的全局变量 - 而且它不存在的原因是因为你没有达到if type == "accounts"条件! 尝试这个: for i in included:
global signs,accounts, regions
global sign_name, acc_name, rg_name
regions = "no region yet"
acc_name = "no acc_name yet"
if ...
您的线程正在运行模块的生命周期 。 在启动线程后立即退出Python程序。 那时,Python开始清理所有内容,包括清理模块全局变量。 __file__名称是首先要做的事情之一。 如果在模块末尾添加一个sleep,则__file__名称的长度足以让您的线程完成: import os
import time
from threading import Thread
def cur_dir():
current_dir = os.path.dirname(os.path.abspath(__...
self是发送到__init__函数的变量(称为对象)。 所以你无法从函数外部访问它。 将错误发生行缩进到函数内部。 class FulfillWhseOrderAction(object):
def __init__(self, name):
self._action_name = name
self._as = actionlib.SimpleActionServer(self._action_name, pkg_commands.msg.Fulfi...
您需要使用self参数引用实例上的方法。 另外,你的add()方法需要返回它生成的mylist变量,你不能将方法局部变量作为方法的属性引用: def display(self):
mylist = self.add()
z = min(mylist)
w = mylist.index(z)
def add(self):
list=[]
mylist=[]
for i in range(2):
self.name = raw_in...
我猜你正在使用Python 2.x ,在Python 2.x中, input实际上是在返回结果之前尝试评估输入,因此如果你输入一些名字,它会将其视为变量并尝试获取其值造成这个问题。 使用raw_input() 。 代替。 示例 - participant = raw_input("Participant name > ")
....
score = raw_input("Score for " + participant + "> ")
I am guessing you are using P...
它与任何版本的Python都不兼容。 hello (或file或任何其他参数名称)是仅在函数体中可用的名称。 当调用func(hello) Python将尝试在全局范围内查找名称hello并失败,因为未定义此类名称。 当Python试图在func体内查找hello它会成功,因为有一个带有该名称的参数。 以下作品: hello = 'Hello'
def func(hello):
print(hello)
func(hello)
因为函数调用func时会找到hello 。 It isn'...
如果没有ValueError则只分配end 。 如果int()引发异常,那么赋值永远不会发生 。 在try测试有效的end值(以便您不知道引发异常),或者指定一个默认值以便首先end 。 例如,以下内容不会抛出您的异常,并且如果输入了1或2以外的任何内容,仍会提示用户重新输入该号码: while True:
try:
end=int(input("If You Dont Want To Buy Anything Press 1 To Exit\nOr If You Woul...
您需要在定义函数后进行调用: def wanttodoagain()
print ("Hi whats your name?")
name = input ('')
print ("Hi, {}".format(name))
print ("So, do you want to do this again?????")
print ("Y/N, it has to be capital")
doagainanswer=input("")
if...
相关文章
Python 编程语言具有很高的灵活性,它支持多种编程方法,包括过程化的、面向对象的和函数式的。但最重
...
python2和python3的区别,1.性能 Py3.0运行 pystone benchmark的速
...
Python的文件类型 Python有三种文件类型,分别是源代码文件、字节码文件和优化代码文件
源代
...
python的官网:http://www.python.org/ 有两个版本,就像struts1和st
...
好久没有写了,还不是近期刚过的期末考试和期中考试 最近因为一个微信公众平台大赛在学phthon 找了本
...