[英]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.