일부 배경 : GUI를 구현하여 GPIB를 통해 장비와 상호 작용합니다. 이 문제는 다음과 같은 방법으로 발생합니다.겉보기에는 관련이없는 부분을 추가 할 때 내 파이썬 코드의 일부분이 왜 다르게 해석됩니까?
from tkinter import *
from tkinter import ttk
import visa #PyVisa Package. pyvisa.readthedocs.io
from time import sleep
import numpy as np #NumPy Package. Scipy.org
def oneDSweep():
Voltage =[]
Current =[]
Source = []
try:
#Gate = parseGate(Gate1Input.get()) #Not implemented yet.
Min = float(Gate1MinInput.get()) #Add a check for valid input
#if Min < .001:
#Throw exception
Max = float(Gate1MaxInput.get()) #Add a check for valid input
VoltageInterval = .02 #Prompt user for interval?
rm = visa.ResourceManager()
SIM900 = rm.open_resource("GPIB0::1::INSTR") #Add a check that session is open.
x = 0
Volt = Min
while Volt <= Max:
SIM900.write("SNDT 1, 'VOLT " + str(Volt) + "'") #Set voltage.
SIM900.write("SNDT 7, 'VOLT? 1'") #Ask a port for voltage.
Vnow = SIM900.query("GETN? 7, 50") #Retrieve data from previous port.
Vnow = Vnow[6:15]
Vnow = float(Vnow) ############Error location
Voltage = np.append(Voltage, Vnow)
SIM900.write("SNDT 1, 'VOLT?'") #Ask a different port for voltage.
Snow = SIM900.query("GETN? 1, 50") #Retrieve data.
print(Snow) #Debugging method. Probably not problematic.
Snow = Snow[4:]
Snow = float(Snow)
sleep(1) #Add a delay for science reasons.
#The code below helps the while loop act like a for loop.
x = x+1
Volt = Min + VoltageInterval*x
Volt = float(truncate(Volt, 7))
finally:
print(Voltage)
print(Source)
Voltage.tofile("output.txt.",sep=",")
SIM900.write("FLSH")#Flush the ports' memories to ensure no bad data stays there.
while 루프의 첫 번째 전달 과정에서 표시된 위치에 간단한 ValueError가 표시됩니다. 파이썬은 문자열을 float로 변환 할 수 없다고 말합니다 (자세한 내용은 나중에 설명). 그러나 다음 5 줄의 코드를 제거하면됩니다.
SIM900.write("SNDT 1, 'VOLT?'")
Snow = SIM900.query("GETN? 1, 50")
print(Snow)
Snow = Snow[4:]
Snow = float(Snow)
프로그램이 완벽하게 실행됩니다. 오류의 원인을 이해합니다.
SIM900.write("SNDT 7, 'VOLT? 1'")
Vnow = SIM900.query("GETN? 7, 50")
나는 기본적으로 널 오류 : 내 기기에 다음 두 줄을 보낼 때 그 선이 추가로. #3000
이 리턴됩니다. 이는 데이터를 출력하도록 요청 받았을 때 출력 할 메시지가 없을 때 시스템이 보내는 공백 메시지입니다. 그러나이 두 줄은 내가 언급 한 네 줄이 프로그램에서 제외되었을 때 #3006 00.003
과 같은 것을 만들어 낸다. 다시 말해서, 네 줄을 내 프로그램에 추가하는 것만으로도 while 루프가 시작될 때 악기가 마지막에 추가 되었음에도 불구하고 메시지가 변경되었습니다.
저는 파이썬의 인터프리터가 잘못되었다고 확신합니다. 이전에 코드를 정리하면서 특정 인용 부호 세트가 '
에서 "
으로 변경되었을 때 같은 줄 내에서도이 동작을 나타내는 다른 인용문 쌍이 없었음에도 동일한 오류가 발생 함을 발견했습니다. 제 질문은, 왜 내 코드의 실행이 코드와 무관 한 변경에 따라 달라지는 것입니까? 다소 문제가있는 특정 응용 프로그램에 대해서는이 문제를 반복하는 것이 어렵다는 것을 이해합니다. 제공 할 수있는 더 많은 정보가 있다면 알려주십시오.
편집 : 명령 프롬프트에서 IDLE로 이동하면 기능이 향상되었습니다. 나는 아직도 일어난 일에 당황 스럽지만, 빈약 한 명령 프롬프트 기술로 인해 어떤 증거도 제공 할 수 없습니다. 이 질문을 닫으십시오.
오류 및 스택 추적을 게시 할 수 있습니까? 파이썬의 +10 살짜리 전염병 통역사가 고장 났다고 생각하기가 어렵습니다. –
당신이 받고있는 전체 오류 추적을 포함해야합니다. –
문자열에 매핑하기 전에 float의 값을 출력하고 무슨 뜻인지 봅니다. 대부분 숫자가 아닌 문자 –