![](/img/trans.png)
[英]why is try except block not working in visual studio code for python 3.7?
[英]Python JSON try except block not working
多次尝试后,此代码仍然失败。 我想做的是将“ cpu stats”作为JSON发送到服务器。 事实是,单独使用cpustats就可以了-只有一个具有不同cpupercentages的namedtuple-用户,闲置等。但是'percpu'返回每个cpu的namedtuple(用户,闲置等)的列表。 因此,我无法将列表转换为字典。 我试图遍历该列表,然后将每个namedtuple发送到服务器。 (对于参考-我正在使用2.7.5)。 该脚本可以正常工作,而无需尝试循环和尝试/例外-它返回了“ 200 OK”。 但是现在,当我运行它时,它甚至都不会返回错误,任何响应消息/状态。 就像脚本只是绕过整个try / except块一样。 最后只是'print cpuStats'行提供了应有的效果。 (这个问题的缩进有些偏离,但是在脚本中可以)
import psutil
import socket
import time
import sample
import json
import httplib
import urllib
serverHost = sample.host
port = sample.port
thisClient = socket.gethostname()
currentTime = int(time.time())
s = socket.socket()
s.connect((serverHost,port))
cpuStats = psutil.cpu_times_percent(percpu=True)
print cpuStats
def loop_thru_cpus():
for i in cpuStats:
cpuStats = cpuStats[i]
cpuStats = json.dumps(cpuStats._asdict())
try:
command = 'put cpu.usr ' + str(currentTime) + " " + str(cpuStats[0]) + "host ="+ thisClient+ "/n"
s.sendall(command)
command = 'put cpu.nice ' + str(currentTime) + " " + str(cpuStats[1]) + "host ="+ thisClient+ "/n"
s.sendall(command)
command = 'put cpu.sys ' + str(currentTime) + " " + str(cpuStats[2]) + "host ="+ thisClient+ "/n"
s.sendall(command)
command = 'put cpu.idle ' + str(currentTime) + " " + str(cpuStats[3]) + "host ="+ thisClient+ "/n"
s.sendall(command)
params = urllib.urlencode({'cpuStats': cpuStats, 'thisClient': 1234})
headers = httplib.HTTPConnection(serverHost, port)
conn.request("POST", "", params, headers)
response = conn.response()
print response.status, response.reason
except IndexError:
break
i = i+1
s.close()
代替:
def loop_thru_cpus():
for i in cpuStats:
cpuStats = cpuStats[i]
cpuStats = json.dumps(cpuStats._asdict())
...
i = i+1
尝试:
def loop_thru_cpus():
for stat in cpuStats:
stat = json.dumps(stat._asdict())
当你说
for i in cpuStats:
i
接受cpuStats
值。 在这种情况下, i
不是整数。 因此, i = i+1
没有任何意义。
cpuStats = cpuStats[i]
这可能引发了IndexError(因为i
不是整数),但是由于某种原因,您没有看到引发的异常。
还要注意,您在此处重新定义cpuStats
,这可能不是您想要的。
您的代码中可能确实存在缩进错误。 运行通过cat -A
发布的代码,将显示选项卡(下面由^I
指示):
try:$
^I $
command = 'put cpu.usr ' + str(currentTime) + " " + str(cpuStats[0]) + "host ="+ thisClient+ "/n"$
...
params = urllib.urlencode({'cpuStats': cpuStats, 'thisClient': 1234})$
...
^I print response.status, response.reason$
$
^I except IndexError:$
break$
您不能混用制表符,也不能在Python代码中放置缩进。 两者之一使用。 PEP8样式指南(以及您在网络上看到的大多数代码)使用4个空格。 混合使用制表符和空格通常会导致IndentationError,但有时您不会收到错误,而只是代码以意外的方式运行。 因此(如果使用4个空格的约定)请小心使用在按下Tab键时添加4个空格的编辑器。
由于您没有看到IndexError,因此也可能没有看到应该已经发生的IndentationError。 您究竟如何解决问题?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.