IronLanguages / main

Work for this repo has moved to https://github.com/IronLanguages/ironpython2
1.16k stars 348 forks source link

Index out of bounds. #1184

Open varnonga opened 9 years ago

varnonga commented 9 years ago

I keep getting this script runtime error that says: Index Error: Index was outside the bounds of the array. I have had some success at fixing it, but do not understand why the thing I do works.

Basically, I take a copy of working code and copy it to the dysfunctional code. I them comment all the functional code out using the "#" symbol. Usually when I do this, it will work. I then delete the commented code out until it becomes dysfunctional. I then add that commented code back in and verify it works.

Usually, I only get three or four extra lines of the commented code back into the original dysfunctional code (that is now functional). So what I do is retype the commented area to fit my design.

It is like Python need to have that space taken up by something. Usually before I do all this, I check all my tabbing first and get rid of all the extra spacing on each line. Sometimes that helps if I have some weird spacing issue.

varnonga commented 9 years ago

This is in iron Python.

jdhardy commented 9 years ago

It would help if you had a minimal script that could reproduce it. Without that it's hard to track anything down.

varnonga commented 9 years ago

Well, I am new to github. I don't know how (yet) to attach a file so that people could view my code. I can physically copy the whole file and you can take it from there. I copy the bad file first, then the good file and you can compare them.

Here is the bad file:


# boilerplate to get access to the C# code

import clr
import time
import Debug_function

clr.AddReference("TestSequencer")
clr.AddReference("IronPython")
clr.AddReference("IronPython.Modules")
clr.AddReference("System.Windows.Forms")

from System import NullReferenceException
from System import Array
from thread import start_new_thread

from System.Windows.Forms import *
from System.Windows.Forms import Application, Button, Form
from TestSequencer.TestInterfaces import SLEValvePackTestInterface

vp = SLEValvePackTestInterface()  
check_tester_is_busy = Debug_function.check_tester_busy
check_tester_is_ready = Debug_function.check_tester_ready
tell_tester_next_test = Debug_function.tell_tester_next_test
tell_test_your_testing = Debug_function.tell_test_your_testing
delay = Debug_function.delay
t_delay = Debug_function.t_delay

try:

#------------------------------------------------------------------------------------------------------------------------------
#---------------------------- Initial Setup  ----------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------

    vp = SLEValvePackTestInterface()   
    vp.Connect('172.16.201.201')

#---  Check to see if we can even communicate. ---------------------------------------------
    print "Communications test"
    try:
        for num in range(100):
            vp.ReadReg(0xF100)
            delay(1)
    except NullReferenceException:
        print "Failed the comms test at the water detect test"
        TestResults.Add("FAILED Communications test at water detect test", 1, "[X]<0")

    print "Passed the comms test"
    TestResults.Add("PASSED Communications test at water detect test", 1, "[X]>0")

    start_new_thread(t_delay,())                       # t_delay will run in the background, keeping the watchdog timer from resetting in the UUT.
                                                        # during periods of delay.
    #----------------------------------------  Ask User if the power supply is already set up for external control. -------------------------------------
    Power_supply_set = 0

    yesNo = OperatorIO.GetYesNo("Power Supply Config", "Is the power supply configured for external operation")

    if(yesNo):
        Power_supply_set = 1
    else:
        Power_supply_set = 0

    #*************************************** Power supply Set up starts here *********************************************

    if(Power_supply_set < 1):

        #Power Supply PREPARATION 
        print("Test External Control")
        OperatorIO.ShowMessage("Power External Control", "Turn on the main power supply first.")
        OperatorIO.ShowMessage("Power External Control", "On the main power supply, Press the 'Shift' button.")
        OperatorIO.ShowMessage("Power External Control", "Then press the 'Menu' button.")
        OperatorIO.ShowMessage("Power External Control", "Use the arrow key to select 'Config'. Then press 'OK'")
        OperatorIO.ShowMessage("Power External Control", "Use the arrow button to select 'EXT-Ctrl'. Then press 'OK'.")
        OperatorIO.ShowMessage("Power External Control", "Verify the following:")
        OperatorIO.ShowMessage("Power External Control", " First parameter, '5v-M' is selected")
        OperatorIO.ShowMessage("Power External Control", "Second parameter, '10v/10K-P' is selected.")
        OperatorIO.ShowMessage("Power External Control", "Third parameter, 'V-P' is selected.")
        OperatorIO.ShowMessage("Power External Control", "Fourth parameter, 'On' is selected.")
        OperatorIO.ShowMessage("Power External Control", "When the parameters have been properly altered, press the 'Enter' key.")
        OperatorIO.ShowMessage("Power External Control", "Press the 'Esc' button twice to get back to the main menu.")
        OperatorIO.ShowMessage("Power External Control", "Plug in tester.")
        OperatorIO.ShowMessage("Power External Control", "Set tester to troubleshoot.")
        OperatorIO.ShowMessage("Power External Control", "Turn on the tester.")

    try:

        #--------------------  Tester Setup ---------------------------------------------------------------------------------------

        print("Power On")
        OperatorIO.ShowMessage("Test Preparation", "View the display on the of the tester.")
        OperatorIO.ShowMessage("Test Preparation", "Use the tester dial and select 'Other'.")
        OperatorIO.ShowMessage("Test Preparation", "Install UUT when asked to by the tester.")
        OperatorIO.ShowMessage("Test Preparation", "Wait for the power LED to come on.")
        OperatorIO.ShowMessage("Test Preparation", "Is the Error LED off?")
        OperatorIO.ShowMessage("Test Preparation", "Does the tester say 'Finished'?")

#---------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------  Water detect Testing -----------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------------------------------------

        yesNo = 1

        while(yesNo == 1):

            vp.WriteReg(0x3003,0)
            delay(20)
            print("Starting water detect test")
            print("Water Detect 0 Average", vp.ReadReg(0x3000))
            print("Water Detect 0 Minimum", vp.ReadReg(0x3002))
            print("Water Detect 0 Maximum", vp.ReadReg(0x3001))
            print("Water Detect 0 Status = 0?", vp.ReadReg(0x3003))
            OperatorIO.ShowMessage("WaterDetect: Depress button", "Press and hold Water Detect Button")
            delay(10)
            print("Water Detect 0 Status = 3?", vp.ReadReg(0x3003))
            print("Water Detect 0 Average", vp.ReadReg(0x3000))
            print("Water Detect 0 Minimum", vp.ReadReg(0x3002))
            print("Water Detect 0 Maximum", vp.ReadReg(0x3001))
            OperatorIO.ShowMessage("WaterDetect: Release button", "Release Water Detect Button")
            print("Water Detect 0 Status = 2?", vp.ReadReg(0x3003))

            yesNo = OperatorIO.GetYesNo("Test Water control", "Test again?")

#-----------------------------------------------------------------------------------------------------------------------------------------------------------
#-------------------------------------- Clean Up & End of story --------------------------------------------------------------------------------------------
#-----------------------------------------------------------------------------------------------------------------------------------------------------------

    finally:
        print "done"
finally:
    # Cleanup code goes here... turn off power, disable valves, etc.
    # This will be executed if there is an error or you Abort the script.
    try:
       #vp.WriteReg(0x1000, 0)
       print("Done")
    except NullReferenceException:
       print "End of test Clean up"
       #TestResults.Add("End of test.", 1, "[X]<0")

    print "done"

****Here is the good file:

# boilerplate to get access to the C# code

import clr
import time
import Debug_function

clr.AddReference("TestSequencer")
clr.AddReference("IronPython")
clr.AddReference("IronPython.Modules")
clr.AddReference("System.Windows.Forms")

from System import NullReferenceException
from System import Array
from thread import start_new_thread

from System.Windows.Forms import *
from System.Windows.Forms import Application, Button, Form
from TestSequencer.TestInterfaces import SLEValvePackTestInterface

vp = SLEValvePackTestInterface()  
check_tester_is_busy = Debug_function.check_tester_busy
check_tester_is_ready = Debug_function.check_tester_ready
tell_tester_next_test = Debug_function.tell_tester_next_test
tell_test_your_testing = Debug_function.tell_test_your_testing
delay = Debug_function.delay
t_delay = Debug_function.t_delay

try:

#------------------------------------------------------------------------------------------------------------------------------
#---------------------------- Initial Setup  ----------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------

    vp = SLEValvePackTestInterface()   
    vp.Connect('172.16.201.201')

#---  Check to see if we can even communicate. ---------------------------------------------
    print "Communications test"
    try:
        for num in range(100):
            vp.ReadReg(0xF100)
            delay(1)
    except NullReferenceException:
        print "Failed the comms test at the water detect test"
        TestResults.Add("FAILED Communications test at water detect test", 1, "[X]<0")

    print "Passed the comms test"
    TestResults.Add("PASSED Communications test at water detect test", 1, "[X]>0")

    start_new_thread(t_delay,())                       # t_delay will run in the background, keeping the watchdog timer from resetting in the UUT.
                                                        # during periods of delay.
    #----------------------------------------  Ask User if the power supply is already set up for external control. -------------------------------------
    Power_supply_set = 0

    yesNo = OperatorIO.GetYesNo("Power Supply Config", "Is the power supply configured for external operation")

    if(yesNo):
        Power_supply_set = 1
    else:
        Power_supply_set = 0

    #*************************************** Power supply Set up starts here *********************************************

    if(Power_supply_set < 1):

        #Power Supply PREPARATION 
        print("Test External Control")
        OperatorIO.ShowMessage("Power External Control", "Turn on the main power supply first.")
        OperatorIO.ShowMessage("Power External Control", "On the main power supply, Press the 'Shift' button.")
        OperatorIO.ShowMessage("Power External Control", "Then press the 'Menu' button.")
        OperatorIO.ShowMessage("Power External Control", "Use the arrow key to select 'Config'. Then press 'OK'")
        OperatorIO.ShowMessage("Power External Control", "Use the arrow button to select 'EXT-Ctrl'. Then press 'OK'.")
        OperatorIO.ShowMessage("Power External Control", "Verify the following:")
        OperatorIO.ShowMessage("Power External Control", " First parameter, '5v-M' is selected")
        OperatorIO.ShowMessage("Power External Control", "Second parameter, '10v/10K-P' is selected.")
        OperatorIO.ShowMessage("Power External Control", "Third parameter, 'V-P' is selected.")
        OperatorIO.ShowMessage("Power External Control", "Fourth parameter, 'On' is selected.")
        OperatorIO.ShowMessage("Power External Control", "When the parameters have been properly altered, press the 'Enter' key.")
        OperatorIO.ShowMessage("Power External Control", "Press the 'Esc' button twice to get back to the main menu.")
        OperatorIO.ShowMessage("Power External Control", "Plug in tester.")
        OperatorIO.ShowMessage("Power External Control", "Set tester to troubleshoot.")
        OperatorIO.ShowMessage("Power External Control", "Turn on the tester.")

    try:

        #--------------------  Tester Setup ---------------------------------------------------------------------------------------

        print("Power On")
        OperatorIO.ShowMessage("Test Preparation", "View the display on the of the tester.")
        OperatorIO.ShowMessage("Test Preparation", "Use the tester dial and select 'Other'.")
        OperatorIO.ShowMessage("Test Preparation", "Install UUT when asked to by the tester.")
        OperatorIO.ShowMessage("Test Preparation", "Wait for the power LED to come on.")
        OperatorIO.ShowMessage("Test Preparation", "Is the Error LED off?")
        OperatorIO.ShowMessage("Test Preparation", "Does the tester say 'Finished'?")

#---------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------  Water detect Testing -----------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------------------------------------

        yesNo = 1

        while(yesNo == 1):

            vp.WriteReg(0x3003,0)
            delay(20)
            print("Starting water detect test")
            print("Water Detect 0 Average", vp.ReadReg(0x3000))
            print("Water Detect 0 Minimum", vp.ReadReg(0x3002))
            print("Water Detect 0 Maximum", vp.ReadReg(0x3001))
            print("Water Detect 0 Status = 0?", vp.ReadReg(0x3003))
            OperatorIO.ShowMessage("WaterDetect: Depress button", "Press and hold Water Detect Button")
            delay(10)
            print("Water Detect 0 Status = 3?", vp.ReadReg(0x3003))
            print("Water Detect 0 Average", vp.ReadReg(0x3000))
            print("Water Detect 0 Minimum", vp.ReadReg(0x3002))
            print("Water Detect 0 Maximum", vp.ReadReg(0x3001))
            OperatorIO.ShowMessage("WaterDetect: Release button", "Release Water Detect Button")
            print("Water Detect 0 Status = 2?", vp.ReadReg(0x3003))

            yesNo = OperatorIO.GetYesNo("Test Water control", "Test again?")

#-----------------------------------------------------------------------------------------------------------------------------------------------------------
#-------------------------------------- Clean Up & End of story --------------------------------------------------------------------------------------------
#-----------------------------------------------------------------------------------------------------------------------------------------------------------

    finally:
        print "done"
finally:
    # Cleanup code goes here... turn off power, disable valves, etc.
    # This will be executed if there is an error or you Abort the script.
    try:
       #vp.WriteReg(0x1000, 0)
       print("Done")
    except NullReferenceException:
       print "End of test Clean up"
       #TestResults.Add("End of test.", 1, "[X]<0")

    print "done"

#
#class UUT_shut_down_error(Exception):
#    """UUT would not shut down
#    msg -- UUT would not shut down
#    def _init_(self,msg);
#        self.msg = msg
#    """
#
#
#try:
#
##------------------------------------------  Ask User if the power supply is already set up for external control. -------------------------------------    
#    Power_supply_set = 0
#    
#    yesNo = OperatorIO.GetYesNo("Power Supply Config", "Is the power supply configured for external operation")
#    
#    if(yesNo):
#        Power_supply_set = 1
#    else:
#        Power_supply_set = 0
#    
#
#        
## **************************************** Power supply Set up starts here *********************************************
#     
#    if(Power_supply_set < 1):
#    
#        #Power Supply PREPARATION 
#        print("Test External Control")
#        OperatorIO.ShowMessage("Power External Control", "Turn on the main power supply first.")
#        OperatorIO.ShowMessage("Power External Control", "On the main power supply, Press the 'Shift' button.")
#        OperatorIO.ShowMessage("Power External Control", "Then press the 'Menu' button.")
#        OperatorIO.ShowMessage("Power External Control", "Use the arrow key to select 'Config'. Then press 'OK'")
#        OperatorIO.ShowMessage("Power External Control", "Use the arrow button to select 'EXT-Ctrl'. Then press 'OK'.")
#        OperatorIO.ShowMessage("Power External Control", "Verify the following:")
#        OperatorIO.ShowMessage("Power External Control", " First parameter, '5v-M' is selected")
#        OperatorIO.ShowMessage("Power External Control", "Second parameter, '10v/10K-P' is selected.")
#        OperatorIO.ShowMessage("Power External Control", "Third parameter, 'V-P' is selected.")
#        OperatorIO.ShowMessage("Power External Control", "Fourth parameter, 'On' is selected.")
#        OperatorIO.ShowMessage("Power External Control", "When the parameters have been properly altered, press the 'Enter' key.")
#        OperatorIO.ShowMessage("Power External Control", "Press the 'Esc' button twice to get back to the main menu.")
#        OperatorIO.ShowMessage("Power External Control", "Plug in tester.")
#        OperatorIO.ShowMessage("Power External Control", "Turn on the tester.")
#    
#    
#    
#    
#    #------------------------------------------------------------------------------------------------------------------------------
#    #---------------------------- Initial Setup  ----------------------------------------------------------------------------------
#    #------------------------------------------------------------------------------------------------------------------------------
#        
jdhardy commented 9 years ago

The common way is to create a gist and link to that from the issue. (I tidied up your formatting anyway.)

jdhardy commented 9 years ago

Is it only your script that causes issues? I won't be able to run it without the TestSequencer and other things. Can you reproduce it without reference to anything but IronPython and the .NET framework?

DinoV commented 9 years ago

You could also run with -X:ExceptionDetail which would output the full .NET stack trace of where the exception is coming from.

varnonga commented 9 years ago

I can zip it up and put it in a drop box or something. I'll try and create a "gist" and see how that works out.

varnonga commented 9 years ago

Jeff,

I have put the files in a drop box and sent you a link. Yes this issue is only with the script.

Glenn Varnon MFG Engineering | Schilling Robotics E: glenn.varnon@fmcti.commailto:glenn.varnon@fmcti.com | P: +1 530-747-2735|

[Twitter]http://twitter.com/FMC_Tech [Facebook] https://www.facebook.com/FMCTI [YouTube] http://www.youtube.com/fmctechnologies [LinkedIn] http://www.linkedin.com/company/fmc-technologies [RightNow] http://www.careers.fmctechnologies.com/

From: Jeff Hardy [mailto:notifications@github.com] Sent: Monday, March 16, 2015 2:16 PM To: IronLanguages/main Cc: Varnon, Glenn Subject: Re: [main] Index out of bounds. (#1184)

Is it only your script that causes issues? I won't be able to run it without the TestSequencer and other things. Can you reproduce it without reference to anything but IronPython and the .NET framework?

— Reply to this email directly or view it on GitHubhttps://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_IronLanguages_main_issues_1184-23issuecomment-2D81945041&d=AwMCaQ&c=r_B2dqKkHczsuXPCSs5DOw&r=HniJO6iP_ToibWznSmYnRzCwj0MQZb3ibTbtor8VGjU&m=TS4JfyoW8SVIlPEKN0AEWsNP5ztT12r-GiaOjLkcNSQ&s=i0fw0CLs2Hy_x29ZsPqH4xgGd2GYrMd7IllUUbGSW7s&e=.

slide commented 8 years ago

Please create a gist with the scripts to reproduce this issue and paste the links here.