Debugging Python
I’m learning how to program in Python and have put together some decent gui code which can be very helpful when trouble-shooting your code.
Trying to solve issues by just looking at your code can be done but it isn’t nearly as fast as using some real debugging python code.
AutoHotKey Debugging Python code
#Persistent #SingleInstance , Force #NoEnv Menu, tray, icon, B:ProgsIconsProgsPython.ico, 1 ;**********************Py_Lists********************************* Menu,Py_Lists,Add, Count of x, Py_Lists_Count Menu,Py_Lists,Add, Append, Py_Lists_Append Menu,Py_Lists,Add, Concatenate, Py_Lists_Concatenate Menu,Py_Lists,Add, Insert, Py_Lists_Insert Menu,Py_Lists,Add, Pop, Py_Lists_Pop Menu,Py_Lists,Add, Remove, Py_Lists_Remove Menu,Py_Lists,Add, Replace x, Py_Lists_Replace Menu,Py_Lists,Add, Reverse, Py_Lists_Reverse Menu,Py_Lists,Add, Sort, Py_Lists_Sort ;**********************Py_Strings********************************* ;**********************Py_Strings_Case********************************* Menu,Py_Strings_Case,Add, Cap 1st Letter, Py_Strings_Capitalize_first Menu,Py_Strings_Case,Add, Lowercase, Py_Strings_Lower Menu,Py_Strings_Case,Add, Uppercase, Py_Strings_Upper Menu,Py_Strings_Case,Add, Title case, Py_Strings_Title Menu,Py_Strings,Add, Change Case, :Py_Strings_Case ;**********************Py_Strings_Slice********************************* Menu,Py_Strings_Slice,Add, Slice me, Py_Strings_Capitalize_first Menu,Py_Strings,Add, Slicing, :Py_Strings_Slice ;**********************Py_Strings_Return********************************* Menu,Py_Strings_Return,Add, Count of Substring, Py_Strings_Count Menu,Py_Strings_Return,Add, index of Substring, Py_Strings_Find Menu,Py_String_Returns,Add, Length, Py_Strings_Length Menu,Py_Strings,Add, Index and Counts, :Py_Strings_Return ;**********************Py_Strings_Append_Trim********************************* Menu,Py_Strings_Append_Trim,Add, LTrim, Py_Strings_LTrim Menu,Py_Strings_Append_Trim,Add, Strip (drops front and back),Py_Strings_Strip Menu,Py_Strings,Add, Append / Trim, :Py_Strings_Append_Trim ;**********************Py_Strings_Regex********************************* Menu,Py_Strings_Regex,Add, email, Py_Strings_Regex_Email Menu,Py_Strings_Regex,Add, Match -named subvars, Py_Strings_Regex_Named_Match Menu,Py_Strings_Regex,Add, Split on Whitespace, Py_Strings_Regex_Split_WhiteSpace Menu,Py_Strings_Regex,Add, Split on range in needle, Py_Strings_Regex_Split_On_Range Menu,Py_Strings,Add, RegEx, :Py_Strings_Regex ;******************************************************* ;******************************************************* ;**********************Tuples********************************* Menu, Py_Tuples, Add, Sort, Py_Tuple_Sort Menu, Py_Tuples, Add, Functions Available, Py_Tuple_Avail_Funcs Menu,Py_Change_Case,Add, Lowercase Tuple, Py_Tuple_LowerCase Menu,Py_Change_Case,Add, Uppercase Tuple, Py_Tuple_UpperCase Menu,Py_Tuples,Add, Change Case, :Py_Change_Case ;******************************************************* ;**********************Stats********************************* ;******************************************************* ;**********************Pandas********************************* ;**********************Panda Options********************************* Menu,Py_Pandas_Options,Add, Have df wrap columns, Py_Pandas_Options_Expand_Frame Menu,Py_Pandas_Options,Add, Width of your disply, Py_Pandas_Options_Width Menu,Py_Pandas_Options,Add, Max column width, Py_Pandas_Options_Max_Col_Width Menu,Py_Pandas_Options,Add, Max # columns, Py_Pandas_Options_Max_Col Menu,Py_Pandas_Options,Add, Max # rows, Py_Pandas_Options_Max_Rows Menu,Py_Pandas_Options,Add, Menu,Py_Pandas_Options,Add, Column Header Justification,Py_Pandas_Options_ColHead_Justify Menu,Py_Pandas_Options,Add, Number of decimal places , Py_Pandas_Options_Precision Menu,Py_Pandas_Options,Add, Default encoding, Py_Pandas_Options_Encoding Menu,Py_Pandas,Add, Options, :Py_Pandas_Options ;**********************Panda Data Frame********************************* Menu,Py_Pandas_DataFrame,Add, Select Multiple Columns, Py_Pandas_DataFrame_Col_Select Menu,Py_Pandas_DataFrame,Add, Frequency Count on Column, Py_Pandas_DataFrame_Col_Count Menu,Py_Pandas_DataFrame,Add, Filter Column on Single value, Py_Pandas_DataFrame_Col_Filter_Single Menu,Py_Pandas_DataFrame,Add, Filter Column on Multiple values, Py_Pandas_DataFrame_Col_Filter_Multiple Menu,Py_Pandas,Add, DataFrame, :Py_Pandas_DataFrame Menu,Py_Pandas_Graph, Add, Graph necessities for plot, Py_Pandas_Graph_Graph_Necess Menu,Py_Pandas,Add,Graph, :Py_Pandas_Graph ;******************************************************* menu,Py_Tuples ,Add, Tuple example, Py_DUMMY_PLACEHOLDER menu,Py_Stats ,Add, Pandas, :Py_Pandas menu,Py_Dictionaries,Add, Dictionaries example, Py_DUMMY_PLACEHOLDER ;**********************Convert Vars********************************* Menu,Py_Convert ,Add, Convert Integer to String, Py_Convert_To_String Menu,Py_Convert ,Add, Convert String to Integer, Py_Convert_To_Integer Menu,Py_Convert ,Add, Convert String to Float, Py_Convert_To_Float Menu,Py_Convert ,Add, Menu,Py_Convert ,Add, Convert List to Tuple, Py_Convert_List_to_Tuple Menu,Py_Convert ,Add, Convert Tuple to List, Py_Convert_Tuple_To_List ;*******************************************************;******************************************************* ;*******************************************************;******************************************************* ;**********************verbs********************************* ;*******************************************************;******************************************************* ;*******************************************************;******************************************************* Menu,Py_Funcs_FruitLess,Add,Fruitless Functions, Py_DUMMY_PLACEHOLDER Menu,Py_Funcs ,Add, Fruit LESS Functions, :Py_Funcs_FruitLess Menu,Py_Funcs_Fruitful,Add,Fruitful Functions, Py_DUMMY_PLACEHOLDER Menu,Py_Funcs ,Add, Fruit FULL Functions, :Py_Funcs_Fruitful Menu,Py_Loops_While ,Add, Iterate through object, Py_DUMMY_PLACEHOLDER Menu,Py_Loops_While ,Add, Dedupe, Py_DUMMY_PLACEHOLDER Menu,Py_Loops,Add, While, :Py_Loops_While Menu,Py_Loops_For ,Add, While loops, Py_DUMMY_PLACEHOLDER Menu,Py_Loops,Add, For, :Py_Loops_For ;******************************************************* ;**********************Debugging Python********************************* Menu,Py_Debugging,Add, Python Path, Py_Python_Path Menu,Py_Debugging,Add, Global Variables and their types, Py_Globals Menu,Py_Debugging,Add, Local Variables and their types, Py_Locals Menu,Py_Debugging,Add, Structure / Shape, Py_StructShape Menu,Py_Debugging,Add, Interactive mode in SciTE, Py_Interactive Menu,Py_Debugging,Add, Display Documentation, Py_Display_Doc Menu,Py_Debugging,Add, Display Help via Browser, Py_Display_Help_HTML Menu,Py_Debugging,Add, List installed Modules and Version, Py_Installed_Modules_Versions ;**********************Tools / Utils********************************* Menu,Py_Tools_Utils,Add, Print function with optional title,Py_Tools_Utils_Print Menu,Py_Tools_Utils,Add, Current date/time ,Py_Tools_Utils_Date_Time Menu,Py_Tools_Utils,Add, Launch iPython, Py_Tools_Utils_iPython ;**********************Python Main menu********************************* Menu,Python, Add, Lists, :Py_Lists Menu,Python, Add, Strings, :Py_Strings Menu,Python, Add, Tupless, :Py_Tuples Menu,Python, Add, Dictionaries, :Py_Dictionaries Menu,Python, Add, Convert Vars, :Py_Convert Menu,Python, Add, Stats, :Py_Stats Menu,Python, Add, ;blank line to separate Menu,Python, Add, Functions, :Py_Funcs Menu,Python, Add, Loops, :Py_Loops Menu,Python, Add, ;blank line to separate Menu,Python, Add, Debugging, :Py_Debugging Menu,Python, Add, Tools / Utilities,:Py_Tools_Utils ;~ Menu,Python, Add, Non-Fruitful Functions,:Py_Fruit_Func ^+Lbutton::Menu, Python, Show ; Control + Left mouse button ;******************************************************* Py_DUMMY_PLACEHOLDER: return ;**********************Debugging********************************* Py_Python_Path: ClipProcess("import sys # Shows Executable, bitness and paths`r`nprint ""rExecutable:"",sys.executable,""r Platform:"",sys.platform,""r""`r`nfor i in sorted(sys.path): print "" Path: "",i`r`n") Return Py_Globals: ClipProcess("for varname,value in globals().items():`r`n print varname,' = ',value,' : ',type(value) # Prints global variables") return Py_Locals: ClipProcess("for varname,value in locals().items():`r`n print varname,' = ',value,' : ',type(value) # Prints Local variables") return Py_StructShape: ClipProcess("from structshape import structshape #prints structure and shape of object from Think Python`rprint structshape(MyVar)") return Py_Interactive: ClipProcess("import code; code.interact(local=locals()) #Allows shell w/in SciTe- look at output window") return Py_Display_Doc: ClipProcess("help(MyModule) # swap out MyModule with Method or object") return Py_Display_Help_HTML: ClipProcess("import os `; os.system('python -m pydoc -g') #Display help in HTML") return Py_Installed_Modules_Versions: ClipProcess("import pip; print('n'.join(sorted(['%s=%s' % (i.key, i.version) for i in pip.get_installed_distributions()]))) #Lists installed Python Modules and their versions") return ;**********************Python********************************* Py_Lists_Append: ClipProcess("MyList.append(x) # Add an item to the end of the list; x is new item") Return Py_Lists_Count: ClipProcess("ct = MyList.count('a') # Return the number of times x appears in the list") Return Py_Lists_Concatenate: ClipProcess("MyList + [36,49,64] # Concatenate values to list") Return Py_Lists_Insert: ClipProcess("MyList.insert(7,'Insert 7') # Insert item at position. MyList.insert(0,'32') inserts 32 at beginning") Return Py_Lists_Pop: ClipProcess("MyList.pop(7) # Remove item at position in the list, AND RETURN IT. If no index is specified, removes and returns the last item. (The brackets around the i denote that the parameter is optional)") Return Py_Lists_Remove: ClipProcess("MyList.remove('text') # Remove the FIRST item from the list whose value is x. It is an error if there is no such item.") Return Py_Lists_Replace: ClipProcess("MyList[7]= '65' # Replace the indexed value with 65") Return Py_Lists_Reverse: ClipProcess("MyList.reverse() # Reverse the elements of the list") Return Py_Lists_Sort: ClipProcess("list_Name.sort(cmp=None, key=None, reverse=False) # Sort the items of the list in place (the arguments can be used for sort customization, see sorted() for their explanation).") Return ;**********************Python Strings********************************* Py_Strings_Capitalize_first: ClipProcess("MyVar = MyVar.capitalize() # Use w/o 'MyVar =' if you don't need to change original variable") return Py_Strings_Count: ClipProcess("ct = MyVar.count('l',0,33) # Return the # of non-overlapping occurrences of substring sub in the range (range is optional)") Return Py_Strings_Find: ClipProcess("i = MyVar.find('l',0,33) # Return the lowest index in the string where substring sub is found. Returns -1 if not found") Return Py_Strings_Length: ClipProcess("len(MyVar) # obtain length of string") Return Py_Strings_Lower: ClipProcess("MyVar = MyVar.lower() # Use w/o 'MyVar =' if you don't need to change original variable") Return Py_Strings_LTrim: ClipProcess("MyVar = MyVar.lstrip('trim') # Return a copy of the string with leading characters removed. (Removes whitespace if no charcters provided") Return Py_Strings_Strip: ClipProcess("MyVar = MyVar.strip('trim') # Return a copy of the string with leading and ending characters removed. (Removes whitespace if no charcters provided") Return Py_Strings_Upper: ClipProcess("MyVar = MyVar.upper() # Use w/o 'MyVar =' if you don't need to change original variable") Return Py_Strings_Title: ClipProcess("MyVar = MyVar.title() # Use w/o 'MyVar =' if you don't need to change original variable") Return ;**********************REgex********************************* Py_Strings_Regex_Email: ClipProcess("import re`rstr = 'purple alice-b@google.com monkey dishwasher'`rmatch = re.search('([w.-]+)@([w.-]+)', str)`rif match:`r print match.group() ## 'alice-b@google.com' (the whole match)`r print match.group(1) ## 'alice-b' (the username, group 1)`r print match.group(2) ## 'google.com' (the host, group 2)") Return Py_Strings_Regex_Named_Match: ClipProcess("import re`r######### Named Regex extracting address`rname = r'[a-zA-z_]w+'`rneedle = '(?:' + name + ')'`rhaystack='Joe King 836 Kilbridge Ln. Coppell tx 75029nJoe Two 836 Kilbridge Ln. Coppell tx 75029'`rneedle='(?P<First_Name>w+)s+(?P<Last_Name>w+)s+(?P<Address>d{1,5}s+w+s+w+.?)s+(?P<City>w+)s+(?P<State>ww)s+(?P<Zipcode>d{1,5})'`rm = re.match(needle, haystack,re.I)`rprint m.group('First_Name'),m.group('Last_Name'), m.group('Address'), m.group('City'), m.group('State').upper(),m.group('Zipcode')") return Py_Strings_Regex_Split_WhiteSpace: ClipProcess("import re`rprint(re.split(r'(s*)', 'heare are some words')) # s is whitespace and splits Haystack") Return Py_Strings_Regex_Split_On_Range: ClipProcess("import re`rprint(re.split(r'[a-fA-F]', 'jfdsklajfkeawfjkSawDFaw',re.I|re.M)) #splits on range listed in needle") Return ;******************************************************* ;**********************Tuples********************************* Py_Tuple_Avail_Funcs: ClipProcess("print(dir(MyTuple)) # List of functions available on Tuple") Return Py_Tuple_UpperCase: ClipProcess("Lower_MyTuple=[x.lower() for x in MyTuple] #List comprehension on Tuple") return Py_Tuple_LowerCase: ClipProcess("Upper_MyTuple=[x.upper() for x in MyTuple] #List comprehension on Tuple") return Py_Tuple_Sort: ClipProcess("s=sorted(MyTuple) #Sort tuple") return ;******************************************************* ;**********************stats********************************* ;**********************pandas********************************* ;**********************Pandas Options********************************* Py_Pandas_Options_width: ClipProcess("pd.options.display.width = 1000 #Set default width") return Py_Pandas_Options_Max_Col_Width: ClipProcess("pd.options.display.max_colwidth = 100 #Set Max col width") return Py_Pandas_Options_Max_Col: ClipProcess("pd.options.display.max_columns = 10 #None =no max cols 0=Autodetect") return Py_Pandas_Options_Max_Rows: ClipProcess("pd.options.display.max_rows = 50 #Max number of rows") return Py_Pandas_Options_Expand_Frame: ClipProcess("pd.options.display.expand_frame_repr = False #show DataFrame across multiple lines") return Py_Pandas_Options_Precision: ClipProcess("pd.options.display.precision = 4 #Control decimals") return Py_Pandas_Options_ColHead_Justify: ClipProcess("pd.options.display.colheader_justify = 'left' #left right justify header") return Py_Pandas_Options_Encoding: ClipProcess("pd.options.display.encoding = 'UTF-8' #this is default so prob not needed") return ;**********************data frame********************************* Py_Pandas_DataFrame_Col_Select: ClipProcess("mydf=df[['MyCols 1','MyCols 2','MyCols 3']][0:14] #Select columns and first 15 rows") Return Py_Pandas_DataFrame_Col_Count: ClipProcess("df['MyCol 1'].value_counts() #Count of items- use max row to expand") return Py_Pandas_DataFrame_Col_Filter_Single: ClipProcess("myFiltered=df['MyCol'] == 'My Value' #filter single column on value") return Py_Pandas_DataFrame_Col_Filter_Multiple: ClipProcess("MyFilter_1 = df['MyVar 1'] == 'MyVal 1' #Filter 1`rMyFilter_2 = df['MyVar 2'] == 'MyVal 2' #Filter 2`rMyFilterd_All_Cols = df[MyFilter_1 & MyFilter_2][:99] #2 filters, all cols, 99 rows`rMyFilterd_Spc_Cols = df[MyFilter_1 & MyFilter_2][['MyVar 1','MyVar 2','MyVar 3']][:99] #2 filters, spec cols, 99 rows") return ;**********************Pandas- Graph********************************* Py_Pandas_Graph_Graph_Necess: ClipProcess("import matplotlib.pyplot as plot #Necessary to add so plot will show up`nplot.show()") Return ;**********************Convert Var********************************* Py_Convert_To_Integer: ClipProcess("MyVar = int(MyVar) # Converts string to Integer. Use w/o 'MyVar =' if you don't need to change original variable") return Py_Convert_To_String: ClipProcess("MyVar = str(MyVar) # Converts to string. Use w/o 'MyVar =' if you don't need to change original variable") return Py_Convert_To_Float: ClipProcess("MyVar = float(MyVar) # Converts to float. Use w/o 'MyVar =' if you don't need to change original variable") return Py_Convert_List_to_Tuple: ClipProcess("MyList=list(MyTuple) #re-casting tuple to list") Return Py_Convert_Tuple_To_List: ClipProcess("MyTuple=tuple(MyList) #re-casting list to tuple") return ;**********************Tools / Utilities********************************* Py_Tools_Utils_Print: ClipProcess("def p(arg,title=''): #My Print Function`r`tprint('<<<---START------'+str(title)+'------>>>r'+str(arg)+'r<<<---END------'+str(title)+'--->>>rr')") return Py_Tools_Utils_Date_Time: ClipProcess("import datetime `; print('Today is: {0:%a %b %d %H:%M:%S %Y}'.format(datetime.datetime.now()))") return Py_Tools_Utils_iPython: ClipProcess("import os `; os.system('ipython notebook') #Display help in HTML") return ;~ ClipProcess("") ;**************ClipProcess function********************************* ClipProcess(TXT){ TXT.="`r`n`r`n" Store:=Clipboard Clipboard:=TXT Send, ^v Sleep, 60 Clipboard:=Store } RAlt:: Browser_Forward::Reload
There are other tools for debugging Python but this is a good starting place.