Reading text file with wierd file extension?

Rhodri James rhodri at wildebst.demon.co.uk
Mon Feb 2 20:40:37 EST 2009


[Quoting restored for reduced

On Mon, 02 Feb 2009 22:33:50 -0000, Lionel <lionel.keene at gmail.com> wrote:

> On Feb 2, 2:01 pm, Mike Driscoll <kyoso... at gmail.com> wrote:
>> On Feb 2, 3:43 pm, Lionel <lionel.ke... at gmail.com> wrote:
>> > On Feb 2, 1:07 pm, "Diez B. Roggisch" <de... at nospam.web.de> wrote:
>>
>> >> This is written very slowly, so you can read it better:
>>
>> > Please post without sarcasm.

On Usenet?  You'll be wanting single unequivocal answers next!

Seriously though, you had been asked several times for the traceback,
so that we could stop guessing and tell you for sure what was going
on, and you hadn't provided it.  Diez's mild sarcasm was not uncalled-
for.  The fact that you didn't have a traceback partially excuses you,
but it would have helped if you'd said so.

>>
>> > This is the output from my Python shell:
>>
>> > >>> DatafilePath = "C:\\C8Example1.slc"
>> > >>> ResourcefilePath = DatafilePath + ".rsc"
>> > >>> DatafileFH = open(DatafilePath)
>> > >>> ResourceFh = open(ResourcefilePath)
>> > >>> DatafilePath
>>
>> > 'C:\\C8Example1.slc'>>> ResourcefilePath
>>
>> > 'C:\\C8Example1.slc.rsc'
>>
>> > It seems to run without trouble. However, here is the offending code
>> > in my class (followed by console output):
>>
>> > class C8DataType:
>>
>> >     def __init__(self, DataFilepath):
>>
>> >         try:
>> >             DataFH = open(DataFilepath, "rb")
>>
>> >         except IOError, message:
>> >             # Error opening file.
>> >             print(message)
>> >             return None

You're catching the IOError, presumably so that you can fail
gracefully elsewhere.  This may not be a particularly good
idea, and in any case it stops the exception reaching the
console where it would cause the traceback to be displayed.
More on this later.

>> >         ResourceFilepath = DataFilepath + ".src"

As other people have pointed out, you've got a typo here.

>> >         print(DataFilepath)
>> >         print(ResourceFilepath)
>>
>> >         # Try to open resource file, catch exception:
>> >         try:
>> >             ResourceFH = open(ResourceFilepath)
>>
>> >         except IOError, message:
>> >             # Error opening file.
>> >             print(message)
>> >             print("Error opening " + ResourceFilepath)
>> >             DataFH.close()
>> >             return None

[Huge amounts of text trimmed]

Fair enough, you're catching the IOError so that you can
ensure that DataFH is closed.  Unfortunately this concealed
the traceback information, which would have made it more
obvious to you what people were talking about.  Given that
this has rather stuffed your C8DataType instance, you
might want to think about re-raising the exception after
you've closed DataFH and letting the outer layers deal
with it in a more appropriate fashion.

Incidentally, this code isn't going to do anything useful
for you anyway even after you've fixed the typo.  DataFH
and ResourceFH are both local variables to __init__ and
will be tossed away when it finishes executing.  If you
want to use them later, make them self.data_fh and
self.resource_fh respectively.

(PEP 8 recommends that you use lower_case_with_underscores
for variable or attribute names, and leave MixedCase for
class names.)

-- 
Rhodri James *-* Wildebeeste Herder to the Masses



More information about the Python-list mailing list