String argumenter i python multi

stemmer
25

Jeg prøver å passere en streng argument til et mål funksjon i en prosess. Annen, blir strengen tolket som en liste over så mange argumenter som det er tegn.

Dette er koden:

import multiprocessing

def write(s):
   print s

write('hello')

p = multiprocessing.Process(target=write, args=('hello'))

p.start()

Jeg får denne produksjonen:

hello
Process Process-1:
Traceback (most recent call last):
>>>   File /usr/local/lib/python2.5/site-packages/multiprocessing/process.py, line 237, in _bootstrap
    self.run()
  File /usr/local/lib/python2.5/site-packages/multiprocessing/process.py, line 93, in run
    self._target(*self._args, **self._kwargs)
TypeError: write() takes exactly 1 argument (5 given)

>>>

Hva gjør jeg galt? Hvordan skal jeg passere en stringn?

Takk, Ariel

Publisert på 13/10/2009 klokken 09:27
kilden bruker
På andre språk...                            


3 svar

stemmer
4

Du må passere

p = multiprocessing.Process(target=write, args=('hello',))

Legg merke komma! Ellers blir det tolket som en enkel snor og ikke som en ett element tuppel.

Svarte 13/10/2009 kl. 09:32
kilden bruker

stemmer
9

Endre args=('hello')til args=('hello',)eller enda bedre args=['hello']. Ellers parentes ikke danner en sekvens.

Svarte 13/10/2009 kl. 09:32
kilden bruker

stemmer
60

Dette er en vanlig fikser i Python - Hvis du vil ha en tuppel med bare ett element, må du angi at det er faktisk en tuppel (og ikke bare noe med parentes rundt det) - dette gjøres ved å legge til et komma etter element .

For å fikse dette, bare sette et komma etter strengen, inne i parentes:

p = multiprocessing.Process(target=write, args=('hello',))

På den måten vil Python gjenkjenne det som en tuppel med et enkelt element, som forutsatt. Foreløpig er Python tolker koden din som bare en streng. Men det er sviktende på denne måten fordi en streng er effektivt liste over tegn. Så Python tenker at du ønsker å passere ( 'h', 'e', ​​'l', 'l', 'o'). Det er derfor det er å si "du ga meg 5 parametre".

Svarte 13/10/2009 kl. 09:33
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more