扩展Python';s Rdio模块

扩展Python';s Rdio模块,python,api,python-2.7,nameerror,rdio,Python,Api,Python 2.7,Nameerror,Rdio,我一直在使用Python访问Rdio API,因此决定在Rdio模块中添加几个方法,以简化工作。我一直受到阻碍 以下是该公司提供的一些Rdio Python模块作为背景: class Rdio: def __init__(self, consumer, token=None): self.__consumer = consumer self.token = token def __signed_post(self, url, params): auth = om

我一直在使用Python访问Rdio API,因此决定在Rdio模块中添加几个方法,以简化工作。我一直受到阻碍

以下是该公司提供的一些Rdio Python模块作为背景:

class Rdio:
  def __init__(self, consumer, token=None):
    self.__consumer = consumer
    self.token = token

  def __signed_post(self, url, params):
    auth = om(self.__consumer, url, params, self.token)
    req = urllib2.Request(url, urllib.urlencode(params), {'Authorization': auth})
    res = urllib2.urlopen(req)
    return res.read()

  def call(self, method, params=dict()):
    # make a copy of the dict
    params = dict(params)
    # put the method in the dict
    params['method'] = method
    # call to the server and parse the response
    return json.loads(self.__signed_post('http://api.rdio.com/1/', params))
好的,一切都很好。这些功能运行良好。因此我决定创建一种方法,将带有
key1
的播放列表复制到带有
key2
的播放列表中。代码如下:

def copy_playlist(self, key1, key2):
  #get track keys from first playlist
  playlist = self.call('get', {'keys': key1, 'extras' : 'tracks'})

  track_keys = []   

  for track in tracks:
      key = track['key']
      track_keys.append(key)

  #convert track list into single, comma-separated string (which the API requires)
  keys_string = ', '.join(track_keys)

  #add the tracks to the second playlist
  self.call('addToPlaylist', {'playlist' : key2, 'tracks' : keys_string})
如果我从终端或在外部Python文件中执行此操作,则此代码可以正常工作,但由于某种原因,当我将其作为Rdio类的一部分包含,然后以
Rdio
的形式启动Rdio对象并调用playlist方法时,我总是会遇到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "rdio_extended.py", line 83, in copy_playlist

NameError: global name 'rdio' is not defined
然后这是调用播放列表复制功能的线路:

rdio.copy_playlist(key1, key2)

这将导致上述名称错误。

您没有向我们显示生成错误的代码,因为您显示的代码都没有引用名为
rdio
的变量。我们无法帮助您使用不可见代码。请给我们看一下你的实际代码,毫无疑问会有人帮你的。然而,我投票赞成你的问题,因为我试图向我们展示相关的代码。这是文件中的实际缩进吗?因此,有一个类
Rdio
,然后是一个自由函数
\uu signed\u post
,它恰好带有一个
self
参数,而不是类
Rdio
的方法
\uu signed\u post
?对不起,我试图在文本中描述它,但我猜我不够清楚。我将修改帖子以反映实际代码。不要显示随机行。将代码作为一个整体显示。问题显然在于,您在中定义的范围
rdio
与您尝试在其中使用它的范围不同。但是,除非你向我们展示完整的例子,或者至少足够让我们看到这两行的范围,否则没有人能告诉你哪里错了。也许您在函数调用中分配了一个局部rdio,并期望它修改一个全局变量。也许你在赋值之前调用了这个方法。或者一百种其他的可能性。您已经向我们展示了大量完全不相关的代码,然后是两行没有上下文的代码。
rdio.copy_playlist(key1, key2)