Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
回溯(最近一次调用last):Python_Python_Eclipse_Azure - Fatal编程技术网

回溯(最近一次调用last):Python

回溯(最近一次调用last):Python,python,eclipse,azure,Python,Eclipse,Azure,当我试图在eclipse中运行python代码时,出现以下错误: 这是我的密码: """ Module Name: deviceManager.py Project: IoTHubRestSample Copyright (c) Microsoft Corporation. Using [Device Indentities REST APIs](https://msdn.microsoft.com/en-us/library/azure/mt548489.aspx) to cr

当我试图在eclipse中运行python代码时,出现以下错误:

这是我的密码:

"""
Module Name:  deviceManager.py
Project:      IoTHubRestSample
Copyright (c) Microsoft Corporation.

Using [Device Indentities REST APIs](https://msdn.microsoft.com/en-us/library/azure/mt548489.aspx) to create a new device identity, retrieve a device identity, and list device identities.

This source is subject to the Microsoft Public License.
See http://www.microsoft.com/en-us/openness/licenses.aspx#MPL
All other rights reserved.

THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, 
EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
"""

import base64
import hmac
import hashlib
import time
import requests
import urllib

class DeviceManager:
    API_VERSION = '2016-02-03'
    TOKEN_VALID_SECS = 365 * 24 * 60 * 60
    TOKEN_FORMAT = 'SharedAccessSignature sr=%s&sig=%s&se=%s&skn=%s'

    def __init__(self, connectionString=None):
        if connectionString != None:
            iotHost, keyName, keyValue = [sub[sub.index('=') + 1:] for sub in connectionString.split(";")]
            self.iotHost = iotHost
            self.keyName = keyName
            self.keyValue = keyValue

    def _buildExpiryOn(self):
        return '%d' % (time.time() + self.TOKEN_VALID_SECS)

    def _buildSasToken(self):
        targetUri = self.iotHost.lower()
        expiryTime = self._buildExpiryOn()
        toSign = '%s\n%s' % (targetUri, expiryTime)
        key = base64.b64decode(self.keyValue.encode('utf-8'))
        signature = urllib.quote(
            base64.b64encode(
                hmac.HMAC(key, toSign.encode('utf-8'), hashlib.sha256).digest()
                )
        ).replace('/', '%2F')
        return self.TOKEN_FORMAT % (targetUri, signature, expiryTime, self.keyName)

    def createDeviceId(self, deviceId):
        sasToken = self._buildSasToken()
        url = 'https://%s/devices/%s?api-version=%s' % (self.iotHost, deviceId, self.API_VERSION)
        body = '{deviceId: "%s"}' % deviceId
        r = requests.put(url, headers={'Content-Type': 'application/json', 'Authorization': sasToken}, data=body)
        return r.text, r.status_code

    def retrieveDeviceId(self, deviceId):
        sasToken = self._buildSasToken()
        url = 'https://%s/devices/%s?api-version=%s' % (self.iotHost, deviceId, self.API_VERSION)
        r = requests.get(url, headers={'Content-Type': 'application/json', 'Authorization': sasToken})
        return r.text, r.status_code

    def listDeviceIds(self, top=None):
        if top == None:
            top = 1000
        sasToken = self._buildSasToken()
        url = 'https://%s/devices?top=%d&api-version=%s' % (self.iotHost, top, self.API_VERSION)
        r = requests.get(url, headers={'Content-Type': 'application/json', 'Authorization': sasToken})
        return r.text, r.status_code

    def deleteDeviceId(self, deviceId):
        sasToken = self._buildSasToken()
        url = 'https://%s/devices/%s?api-version=%s' % (self.iotHost, deviceId, self.API_VERSION)
        r = requests.delete(url, headers={'Content-Type': 'application/json', 'Authorization': sasToken, 'If-Match': '*' }) 
        # If-Match Etag, but if * is used, no need to precise the Etag of the device. The Etag of the device can be seen in the header requests.text response 
        return r.text, r.status_code

if __name__ == '__main__':
    connectionString = 'HostName=<iot-hub-name>.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<iothubowner-policy-key>'
    dm = DeviceManager(connectionString)
    deviceId='iotdevice1'
    print(dm.createDeviceId(deviceId))
    print(dm.retrieveDeviceId(deviceId))
    print(dm.listDeviceIds())
“”“
模块名称:deviceManager.py
项目:IoTubRestSample
版权所有(c)微软公司。
使用[设备标识REST API](https://msdn.microsoft.com/en-us/library/azure/mt548489.aspx)要创建新的设备标识,请检索设备标识并列出设备标识。
此源受Microsoft公共许可证的约束。
看见http://www.microsoft.com/en-us/openness/licenses.aspx#MPL
保留所有其他权利。
本规范和信息按“原样”提供,不提供任何形式的担保,
明示或暗示,包括但不限于暗示
适销性和/或适用于特定用途的保证。
"""
导入base64
进口hmac
导入hashlib
导入时间
导入请求
导入URL库
类设备管理器:
API_版本='2016-02-03'
令牌有效秒=365*24*60*60
令牌\u格式='SharedAccessSignature sr=%s&sig=%s&se=%s&skn=%s'
定义初始化(self,connectionString=None):
如果连接字符串!=无:
IoHost,keyName,keyValue=[sub[sub.index('=')+1:]用于connectionString.split(“;”)中的sub
self.iotwost=iotwost
self.keyName=keyName
self.keyValue=keyValue
def_buildexpireyon(自):
返回“%d%”(time.time()+self.TOKEN\u VALID\u SECS)
def_buildSasToken(自):
targetUri=self.iotHost.lower()
expiretime=self.\u buildexpireyon()
toSign='%s\n%s'(目标URI,到期时间)
key=base64.b64解码(self.keyValue.encode('utf-8'))
signature=urllib.quote(
base64.b64编码(
hmac.hmac(key,toSign.encode('utf-8'),hashlib.sha256.digest()
)
).替换(“/”,“%2F”)
返回self.TOKEN_格式%(targetUri、签名、到期时间、self.keyName)
def createDeviceId(自身,deviceId):
sasToken=self.\u buildSasToken()
url='https://%s/devices/%s?api版本=%s'(self.iotHost、deviceId、self.api\u版本)
正文='{deviceId:“%s”}'%deviceId
r=requests.put(url,headers={'Content-Type':'application/json','Authorization':sasToken},data=body)
返回r.text、r.status\u代码
def retrieveDeviceId(自身,设备ID):
sasToken=self.\u buildSasToken()
url='https://%s/devices/%s?api版本=%s'(self.iotHost、deviceId、self.api\u版本)
r=requests.get(url,headers={'Content-Type':'application/json','Authorization':sasToken})
返回r.text、r.status\u代码
def ListDeviceID(自身,顶部=无):
如果top==无:
top=1000
sasToken=self.\u buildSasToken()
url='https://%s/设备?顶部=%d和api版本=%s%%(self.iotHost,顶部,self.api\u版本)
r=requests.get(url,headers={'Content-Type':'application/json','Authorization':sasToken})
返回r.text、r.status\u代码
def deleteDeviceId(自身,deviceId):
sasToken=self.\u buildSasToken()
url='https://%s/devices/%s?api版本=%s'(self.iotHost、deviceId、self.api\u版本)
r=requests.delete(url,标题={'Content-Type':'application/json','Authorization':sasToken,'If Match':'*'))
#如果匹配Etag,但如果使用*,则无需精确设备的Etag。可以在header requests.text响应中看到设备的Etag
返回r.text、r.status\u代码
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
connectionString='HostName=.azure-devices.net;SharedAccessKeyName=IoTubOwner;SharedAccessKey=
dm=设备管理器(连接字符串)
deviceId='IoDevice1'
打印(dm.createDeviceId(deviceId))
打印(数据检索设备ID(设备ID))
打印(dm.listDeviceID())

如何修复此问题?

您的链接代码似乎是我编写的Azure代码示例,它来自及其介绍。根据您的错误屏幕截图,我看到了代码
connectionString='HostName=.azure-devices.net;SharedAccessKeyName=IoTubOwner;SharedAccessKey='
未更改。如果您没有创建IoTHub,请按照官方教程创建IoTHub,并复制您的IoT hub名称和密钥(如下),而不是
&


这与java有什么关系?从错误来看,您似乎超过了请求库的重试次数限制。我建议您捕获异常并休眠一段时间,例如5秒,然后重试您的请求,因为我正在使用eclipse来运行此代码。我尝试调试,但找不到此错误。你能试着看一下所附的程序代码和错误截图,并向我建议解决方案吗?正如我所提到的,试着捕捉异常,将对第55行的调用放入一个try except中,然后休眠一段时间,然后再次调用相同的方法,看看它是否会通过。欢迎来到StackOverflow!请将您的代码直接添加到问题(创建a),而不是链接到网站。此错误通常意味着终点没有响应。你确定地址正确吗?如果是临时错误,它将重试多次,然后抛出此错误。堆栈交易中的主机名看起来很奇怪。看起来有点像你没有逃避某些角色?