Issues with in try except and excel spreadsheet

padawanwebdev at gmail.com padawanwebdev at gmail.com
Tue Mar 14 10:26:00 EDT 2017


On Tuesday, March 14, 2017 at 4:42:39 AM UTC-7, Rhodri James wrote:
> On 13/03/17 20:37, padawanwebdev at gmail.com wrote:
> > On Monday, March 13, 2017 at 11:10:36 AM UTC-7, Rhodri James wrote:
> >> On 13/03/17 17:40, padawanwebdev at gmail.com wrote:
> >>> Hello, I'm having a problem with a try except inside a while loop. The problem I see occuring has to do with an excel file the script tries to write to while the excel file is open. The exception captures and gives an error:
> >>>
> >>> OError: [Errno 13] Permission denied:'C:\\Users\\Administrator\\Desktop\\Version5.0\\DeviceTrackerReport45.xlsx'
> >>>
> >>> This is expected and is not the problem. However, the issue occurs when I close the excel file. As an example, if I run the script and the excel file is open thru 3 iterations, meaning that the script can't write to the excel file until the excel file is closed, then after the excel file is closed the script prints to the excel file 3 times. I don't need it to write to the excel file 3 times. I only need it to write just once. If the excel file is closed before I run the script than it works like its suppose too.
> >>> I hope I made my case clear. I look forward to some feedback. Any would be greatly appreciated!
> >>
> >> When you say "...the excel file is open thru 3 iterations", what do you
> >> mean?  Three iterations of what?  You haven't shown us a loop, so it's
> >> not obvious.
> >>
> >> How do you know it prints (writes?) to the excel file three times?
> >> Again, there's nothing in the code snippet that would tell you.
> >>
> >>> here is part of the code:
> >>>
> >>>         connectionResults = None
> >>>         returnResults = InternetQualityTest.connectionTest(connectionResults)
> >>>         if returnResults == True:
> >>>             try:
> >>>                 execfile('assetMapping.py')
> >>>                 time.sleep(4)
> >>>                 sys.exit()
> >>>             except Exception as e:
> >>>                 print "error",e
> >>>                 time.sleep(20)
> >>
> >> This looks plausible, though honestly the execfile makes me feel icky
> >> for unrelated reasons.  I repeat, though; this isn't a loop, and my
> >> crystal ball isn't up to telling me how it gets invoked.
> >>
> >>> FYI: The assetMapping.py runs another module from inside, and it's this module running from assetMapping that writes to the excel file.
> >>>
> >>
> >>
> >> --
> >> Rhodri James *-* Kynesim Ltd
> >
> > I apologize if I short-changed you with the code. It's a bigger piece of code and I thought maybe with my explanation and the piece I showed it would be enough. I was wrong. Here is the rest. I apologize in advance if there are any more confusions.
> >
> > I do appreciate your help! Thanks in advance :-)
> >
> >
> > THIS IS: Main.py
> >
> > import InternetQualityTest
> > import assetMapping
> > import time
> > import sys
> >
> >
> >
> > if __name__ == '__main__':
> >
> >     while True:
> >
> >         connectionResults = None
> >         returnResults = InternetQualityTest.connectionTest(connectionResults)
> >         if returnResults == True:
> >             try:
> >                 execfile('assetMapping.py')
> >                 time.sleep(4)
> >                 sys.exit()
> >             except Exception as e:
> >                 print "error",e
> >                 time.sleep(20)
> 
> [Large amount of code with no suspicious-looking loops snipped]
> 
> Thanks for the extra code.  It's hard to get the balance right between 
> giving people enough information to help and giving us so much 
> information we can't see the wood for the trees.
> 
> Anyway, I'll go back to my questions.  What output do you have that 
> convinces you that assetMapping.py is invoked three (or however many) 
> times while the excel file is open?  What output do you have that 
> convinces you that it then writes three (or however many) times?  As far 
> as I can tell, the loop above can only repeat the call to execfile() if 
> it catches an exception: what were those exceptions?
> 
> -- 
> Rhodri James *-* Kynesim Ltd

As an example, If I have the excel file open and there is data that needs to be written to the excel file than the exception will catch this error: 

IOError: [Errno 13] Permission denied: 'C:\\Users\\Administrator\\Desktop\\Version5.0\\DeviceTrackerReport45.xlsx'

essentially, because the excel file is open during the process of writing to the excel file the "try" will keep attempting to write to the excel until its closed. So, if there were 5 attempts to write the data to the excel file, then after the excel file is closed that data will be written to the excel file n+1  times (6 times). When this happens it shows 6 rows of the newly written data, however, it's the same data. To illustrate this here is the output from the shell line while the excel file is open and when it's closed. Note, When I close it it will say Report Updated. 

Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
-1
Test = True

error [Errno 13] Permission denied: 'C:\\Users\\Administrator\\Desktop\\Version5.0\\DeviceTrackerReport45.xlsx'
-1
Test = True

error [Errno 13] Permission denied: 'C:\\Users\\Administrator\\Desktop\\Version5.0\\DeviceTrackerReport45.xlsx'
-1
Test = True

error [Errno 13] Permission denied: 'C:\\Users\\Administrator\\Desktop\\Version5.0\\DeviceTrackerReport45.xlsx'
-1
Test = True

error [Errno 13] Permission denied: 'C:\\Users\\Administrator\\Desktop\\Version5.0\\DeviceTrackerReport45.xlsx'
-1
Test = True

error [Errno 13] Permission denied: 'C:\\Users\\Administrator\\Desktop\\Version5.0\\DeviceTrackerReport45.xlsx'
-1
Test = True

Report Updated
>>> 


This is what's written to the excel file:

3	NB19097	24.221.51.225	376_SouthYard	373_Reseda	03-14-2017	07:03:46
4	NB19097	24.221.51.225	376_SouthYard	373_Reseda	03-14-2017	07:04:07
5	NB19097	24.221.51.225	376_SouthYard	373_Reseda	03-14-2017	07:04:27
6	NB19097	24.221.51.225	376_SouthYard	373_Reseda	03-14-2017	07:04:47
7	NB19097	24.221.51.225	376_SouthYard	373_Reseda	03-14-2017	07:05:07
8	NB19097	24.221.51.225	376_SouthYard	373_Reseda	03-14-2017	07:05:28

As you can see from the shell line the number of attempts made, and from the excel file the number of rows taken, that there is a correlation between the attempts and what gets written to the excel file. 

Also, if the excel file is closed during the writing process than the execfile() executes once because there is no exception, and the data only gets written once to the excel file. 

because the execfile() is inside the try except it catches this error:

error [Errno 13] Permission denied: 'C:\\Users\\Administrator\\Desktop\\Version5.0\\DeviceTrackerReport45.xlsx'

which is just telling you that the data can't be written to the excel file because its open.

Thanks again Mr. James. I hope with my explanation I may have cleared up any confusion of the problem I'm facing.


More information about the Python-list mailing list