PDA

Visualizza la versione completa : [Python] errore inaspettato


sir daniel
23-01-2009, 00:51
salve a tutti, ho bisogno di aiuto per un programma in python.




#!/usr/bin/python
#classe che gestisce la rubrica

class ppl():

__name=''
__surname=''
__cell=''
__street=''

def ins(self):

print('Inserisci i dati della persona: ')
print('I dati contrassegnati da * sono obbligatori\n') #qui mi da errore di indentazione.
self.__name=input('* Nome: ')
self.__surname=input('* Cognome: ')
self.__cell=input('Cellulare/Tel. fisso: ')
self.__street=input('Indirizzo: ')

i=0
while i!=1:
if self.__name=='' or self.__surname=='':
print('\n')
print('Inserire nome e cognome!')
self.__name=input('* Nome: ')
self.__surname=input('* Cognome: ')
continue
else:
i=1


L'errore che mi da dice questo:
inconsistent use of tabs and spaces in indentation

se provo a cancellare lo spazio non risolvo niente. Il rigo dell'input passa accanto al print e successivamente mi da di nuovo errore nello stesso punto.

Come posso risolvere?

billiejoex
23-01-2009, 19:45
Il messaggio di traceback (che non hai incollato) ti dice il numero di riga in cui si trova l'errore di indentazione.

sir daniel
24-01-2009, 13:59
qui che da errore:


print('I dati contrassegnati da * sono obbligatori\n') #qui mi da errore di indentazione.


ma non capisco xk. anche se cancello l'indentazione lo da lo stesso

billiejoex
24-01-2009, 14:07
Evidentemente non hai indentato quella linea.

sir daniel
24-01-2009, 14:42
strano xk come vedi anche qui ho incollato il codice e sta indentato.
Se lo apro con Notepad++ per mi da un'indentatura diversa da quella che mi da su IDLE.

billiejoex
24-01-2009, 14:43
Il messaggio di errore dovrebbe riportare il numero della linea "sdentata".

sir daniel
24-01-2009, 14:46
si lo so, mi dice linea 14, cio quella che ho segnato.
Ma se provo a cancellare l'indentatura continua a darmi lo stesso errore.
Non ci sono spazi superflui tra un rigo e l'altro e l'indentatura sembra corretta.

billiejoex
24-01-2009, 14:58
Prova cosi:



#!/usr/bin/python
#classe che gestisce la rubrica

class ppl():

__name=''
__surname=''
__cell=''
__street=''

def ins(self):
print('Inserisci i dati della persona: ')
print('I dati contrassegnati da * sono obbligatori\n') #qui mi da errore di indentazione.
self.__name=input('* Nome: ')
self.__surname=input('* Cognome: ')
self.__cell=input('Cellulare/Tel. fisso: ')
self.__street=input('Indirizzo: ')

i=0
while i!=1:
if self.__name=='' or self.__surname=='':
print('\n')
print('Inserire nome e cognome!')
self.__name=input('* Nome: ')
self.__surname=input('* Cognome: ')
continue
else:
i=1

billiejoex
24-01-2009, 15:03
Alcuni consigli:

- __name, __surname, ecc... sono attributi *privati* ovvero non accessibili se non dall'interno della tua stessa classe. Non credo tu li voglia usare.

- I nomi delle classi dovrebbero cominciare con una lettera maiuscola (ppl -> Ppl, vedi PEP-8: http://www.python.org/dev/peps/pep-0008/ )

- Invece di "if self.__name=='' or self.__surname==''" dovresti usare: "if not self.__name or not self.__surname:"

- Vedo che utilizzi Python 3.0, che per ora io sconsiglio sempre di usare in favore della 2.6.

sir daniel
24-01-2009, 15:09
ho risolto il problema.
Ho riscritto la classe in modo identico e ora non mi da errore.

x quanto riguarda i nome delle variabili li avevo messi cos xk avevo capito una cosa diversa del loro ruolo.
Pensavo che scrivendoli cos fossero accessibili in modo diverso.
Grazie, modificher. Non ho ben capito il not nell'if per.

Che vantaggi ci sono tra python 3.0 e 2.6?

Visto che mi trovo ti chiedo un'altra cosa anche.

Quando uso la funzione write() come faccio a dire che deve andare a capo rigo?
e come faccio a dirgli che deve scrivere sempre alla fine del file?

Loading