Python 问题 : AttributeError: 'dict' object has no attribute 'upper'

标签 python google-app-engine twitter

我在尝试发布推文时从 AppEngine 收到此错误。我认为我的语法不太正确,但此刻我不知所措。

对于我来说,我似乎无法使用以下方法将我的状态参数发送到 post 函数中的 **extra_params:

args = {} <br/>
args.update({'status': 'THIS IS MY TWEET'})<br/>
info2 = client.post('/statuses/update',args)<br/>

确切的错误是:

"File "/base/data/home/apps/kymbatweet/1.350119792863170339/main.py", line 311, in get_signed_body
    __meth.upper(), __url, '&'.join(
AttributeError: 'dict' object has no attribute 'upper'"

有什么想法吗? (代码如下)

    def post(self, api_method, http_method='POST', expected_status=(200,), **extra_params):

        if not (api_method.startswith('http://') or api_method.startswith('https://')):
            api_method = '%s%s%s' % (
                self.service_info['default_api_prefix'], api_method,
                self.service_info['default_api_suffix']
                )

        if self.token is None:
            #self.token = OAuthAccessToken.get_by_key_name(self.get_cookie())
            self.token = "000"



        fetch = urlfetch(url=api_method, payload=self.get_signed_body(
            api_method, "000", http_method, **extra_params
            ), method=http_method)

        if fetch.status_code not in expected_status:
            raise ValueError(
                "Error calling... Got return status: %i [%r]" %
                (fetch.status_code, fetch.content)
                )

        return decode_json(fetch.content)



    def get_signed_body(self, __url, __token=None, __meth='GET',**extra_params):

        service_info = self.service_info

        kwargs = {
            'oauth_consumer_key': service_info['consumer_key'],
            'oauth_signature_method': 'HMAC-SHA1',
            'oauth_version': '1.0',
            'oauth_timestamp': int(time()),
            'oauth_nonce': getrandbits(64),
            }

        kwargs.update(**extra_params)
        #This works if hardcoded
        #kwargs.update({'status': 'AE'})

        if self.service_key is None:
            self.service_key = get_service_key(self.service)

        if __token is not None:
            kwargs['oauth_token'] = "000"
            key = self.service_key + encode("6iD2LYnUfEOYl0zOCj5IKawbok3pjs4yixay5bdM")
        else:
            key = self.service_key
        #Code BOMBS HERE
        message = '&'.join(map(encode, [
            __meth.upper(), __url, '&'.join(
                '%s=%s' % (encode(k), encode(kwargs[k])) for k in sorted(kwargs)
                )
            ]))

        kwargs['oauth_signature'] = hmac(
            key, message, sha1
            ).digest().encode('base64')[:-1]

        return urlencode(kwargs)



class MainHandler(RequestHandler):
    """Demo Twitter App."""

    def get(self):

        client = OAuthClient('twitter', self)

        client.token = "000"


        args = {}
        args.update({'status': 'THIS IS MY TWEET'})

        info2 = client.post('/statuses/update',args)

最佳答案

您没有将其作为 extra_params 传递,而是作为 http_method 传递。

info2 = client.post('/statuses/update', **args)

关于Python 问题 : AttributeError: 'dict' object has no attribute 'upper' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5852692/

相关文章:

python - 如何获取登录后的 header ?

python - 使用 Python 对网格内的总线长求和

java - 如何将文件写入谷歌云存储默认存储桶

twitter - 在灯箱上显示 Facebook 和 Twitter 共享页面

python - 如何使用 Python/flask 将 Twitter 元数据从服务器流式传输到客户端浏览器

Android 分享 Intent 选择器

python - 数据流 : using beam. combiners 上一个 beam.combiners 的结果

python - 基于索引对多索引数据进行操作

google-app-engine - 如何防止在开发服务器上删除 GAE 数据库?

python - 在 Ubuntu 14.04 上安装 python 谷歌云存储客户端