Following written before Dave Angel's post but sent afterwards.
On 10/18/2011 1:59 PM, Navneet wrote:
Hi,
I am trying to search a list for prime numbers but it's throwing me an
error at line no.25.
I am not able to figure what exactly is the prob
ne help ??? Error is this:
$ python "prime1 - Copy.py"
Unhandled exception in thread started by
Traceback (most recent call last):
File "prime1 - Copy.py", line 25, in findPrime
close failed in file object destructor:
Error in sys.excepthook:
program is below:
This program could not produce the above exception. Run it. You should get:
f = open("A;\Numberlist.txt")
IOError: [Errno 2] No such file or directory: 'A;\\Numberlist.txt'
due to the ; in the path name.
If you fix that then you should get:
Traceback (most recent call last):
File "N:\python\findprime.py", line 25, in findPrime
for i1 in range(len(c)): ##this is the 25th line
NameError: global name 'c' is not defined
Please fix these problems and return with a new program and the output
from that program.
Numberlist is number range from 1..1000
Huh? What is Numberlist? I only see Numberlist.txt, which I assume is a
file. How can a file be number range from 1..1000?
Please instead post a sample of the actual file. My *guess* is the file
looks like:
1
2
3
etc.
My guess may be correct, but having to guess wastes all our time.
import sys
import threading
import thread
import time
class FindPno():
c = []
f = open("A;\Numberlist.txt")
for i in f:
c.append(i)
f.close()
replace the above 5 lines with
c = open(corrected path).readlines()
or even better
c = {int(x) for x in ("A;\corrected path)]
then you can dispense with
##print len(c)
##Thread should start here
def __init__(self):
thread.start_new_thread(self.findPrime,(1,))
def findPrime(self,tid):
global tlock
## print "I am here"
tlock = thread.allocate_lock()
## print "I am here"
tlock.acquire()
## print "I am here"
for i1 in range(len(c)): ##this is the 25th line
for i2 in range(2,int(c[i1])):
if int(c[i1]) == 1:
print "I am here"
tlock.release()
break
if int(c[i1]) == 2:
print c
Why print the entire list?
print "I am here"
tlock.release()
break
rem = int(c[i1])%i2
if rem == 0:
print "I am here"
tlock.release()
break
if i2 == int(c[i1])-1:
print int(c[i1]), "This is the Thread",tid
print "I am here"
tlock.release()
tlock.release()
if __name__ == '__main__':
a = FindPno()
Why did you use a class? You don't need it, and it complicates things.
Why put some of the code in the mainline of the class and some in
__init__. I see no need for that separation.
Since you use print statements to monitor progress how about addind
something so you know which print statement was called. Perhaps print "I
am here 1", print "I am here 2", etc.
Why have the file at all? Why not just start with c = range(1,1000)?
--
Bob Gailer
919-636-4239
Chapel Hill NC
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor