我正在编写一个将在Fusion 360中运行的程序。Fusion360使用Python作为其脚本语言,并且提供了自己的Python。执行我的程序后,Fusion 360将其加载到Python中并运行。因此,我对Python环境没有任何控制权。只要它们在我的程序中是本地的,并且可以使用相对路径导入,就可以使用其他软件包,但我更喜欢使用Python标准库来避免重新交付更多组件及其依赖项的额外问题。
Fusion 360使用的是Python 3.5.3,我正在尝试进行一些RESTFUL API调用。在Windows上,一切都按预期方式运行,但在Mac上却失败了。我最初尝试使用请求,并假设失败是由于请求包引起的,但有人建议使用urllib代替标准库,并且由于相同的原因也失败了。
该代码适用于大多数标准网站(以下示例中的Google),但不适用于其他网站。在我的测试中,当端点是REST API时,它总是会失败,但是对于github.com,它也会失败,因此可能是一个麻烦。这是我经验很少的领域,可以使用一些有关如何调试和解决问题的建议。
import traceback
import urllib.request
def run(context):
try:
# url = 'https://github.com'
# url = 'https://google.com'
url = 'https://api.github.com'
req = urllib.request.urlopen(url)
print(req.read())
req.close()
except:
print(traceback.format_exc())
正如我之前所说,这在Windows上可以运行,但在Mac上则无法运行。这是失败的跟踪结果。
回溯(最近通话最近):文件 “ /用户/管理员/图书馆/应用程序 支持/ Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/urllib/request.py”, 在do_open中的1254行 h.request(req.get_method(),req.selector,req.data,标头)文件“ / Users / admin / Library / Application 支持/ Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/http/client.py“, 1107行,应要求 self._send_request(方法,URL,正文,标题)文件“ / Users / admin / Library / Application 支持/ Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/http/client.py“, 行_send_request中的1152行 self.endheaders(body)文件“ / Users / admin / Library / Application Support / Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/http/client.py“, 1103行,在标题中 self._send_output(message_body)文件“ / Users / admin / Library / Application 支持/ Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/http/client.py“, _send_output中的第934行 self.send(msg)文件“ / Users / admin / Library / Application Support / Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/http/client.py“, 发送中的第877行 self.connect()文件“ / Users / admin / Library / Application Support / Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/http/client.py“, 连接线1261 server_hostname = server_hostname)文件“ / Users / admin / Library / Application 支持/ Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/ssl.py”, 第385行,在wrap_socket中 _context = self)文件“ / Users / admin / Library / Application Support / Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/ssl.py”, 第760行, init self.do_handshake()文件“ / Users / admin / Library / Application Support / Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/ssl.py”, 996行,在do_handshake中 self._sslobj.do_handshake()文件“ / Users / admin / Library / Application 支持/ Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/ssl.py”, 第641行,在do_handshake中 self._sslobj.do_handshake()ssl.SSLError:[SSL:TLSV1_ALERT_PROTOCOL_VERSION] tlsv1警报协议版本 (_ssl.c:720)
在处理上述异常期间,发生了另一个异常:
回溯(最近通话最近):文件 “ /Users/admin/Dropbox/Scripts/RestfulTest/RestfulTest.py”,第23行,在 跑 req = urllib.request.urlopen(url)文件“ / Users / admin / Library / Application 支持/ Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/urllib/request.py”, urlopen中的第163行 返回opener.open(URL,数据,超时)文件“ / Users / admin / Library / Application 支持/ Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/urllib/request.py”, 466号线,开放 响应= self._open(req,data)文件“ / Users / admin / Library / Application 支持/ Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/urllib/request.py”, _open中的第484行 '_open',要求)文件“ / Users / admin / Library / Application Support / Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/urllib/request.py”, _call_chain中的第444行 结果= func(* args)文件“ / Users / admin / Library / Application Support / Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/urllib/request.py”, 第1297行,位于https_open context = self._context,check_hostname = self._check_hostname)文件“ / Users / admin / Library / Application 支持/ Autodesk / webdeploy / production / a71844880b03ed71d4a9c581cd70965fd6323ebc / Autodesk 融合 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/urllib/request.py”, 在do_open中的1256行 引发URLError(err)urllib.error.URLError: