5

I am writing a program to find all the subsets of a given string. However it is resulting in an error called Killed: 9.

class Strings(object):
    def __init__(self,string):
        self.list1=[]
        self.string=string

    def appendToList(self,ch1):
        self.list1.append(ch1)
        for i in self.list1:
            self.list1.append(i+ch1)

    def subset(self):
        for ch in self.string:
            self.list1=self.appendToList(ch)
        print self.list1

obj=Strings('hello')
obj.subset()
Remi Guan
  • 21,506
  • 17
  • 64
  • 87
Praveen Gupta
  • 55
  • 1
  • 1
  • 3

2 Answers2

8

You can ask the program kill what that signal means:

$ kill -l | column 
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

So your program receives a SIGKILL (probably by the OOM killer):

SIGKILL

Default action: Abnormal termination of the process.

Description: Kill (cannot be caught or ignored).

C.f. Who "Killed" my process and why?

Community
  • 1
  • 1
Kijewski
  • 25,517
  • 12
  • 101
  • 143
6

you enter an infinite loop when you append an element every time you iterate over existing elements (in appendToList) and no need to assign in subset method, check this out:

class Strings(object):
    def __init__(self,string):
        self.list1=[]
        self.string=string

    def appendToList(self,ch1):
        self.list1.append(ch1)
        # for i in self.list1: # no needed for loop is in subset
        #    self.list1.append(i+ch1)


    def subset(self):
        for ch in self.string:
            self.appendToList(ch) # no need to assign to self.list1
        print self.list1

obj=Strings('hello')
obj.subset()
Roberto
  • 2,115
  • 24
  • 32