Toon posts:

[Python] TypeError: size() takes exactly 1 argument

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben een noob in python maar ik zit met een fout in me programma, mischien kunnen jullie helpen.

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import os
from os.path import join
import time             # Functions for handling time
import stat             # Functions for interpreting file status tuples

class PathInfo:
    def __init__ ( self, pathName ):
        self.path  =  pathName
        self.stat  =  os.lstat(pathName)
        self.mode  =  self.stat[stat.ST_MODE]

    def __str__ ( self ):
        baseName = (os.path.split(self.path))[1]
        return ( "%s  %s  %8d %s" %
                 ( self._modeFlags(), self._modTime(), self.size(),
                   baseName ) )

    def _modeFlags ( self ):
        return self._dirFlag() + self._permFlags()

    def _dirFlag ( self ): 
        if stat.S_ISLNK(self.mode):
            return "l"
        elif stat.S_ISDIR(self.mode):
            return "d"
        elif stat.S_ISREG(self.mode):
            return "-"
        else:
            return "?"

    def _permFlags ( self ):
        return ( self._rwx ( self.mode & stat.S_IRUSR,
                             self.mode & stat.S_IWUSR,
                             self.mode & stat.S_IXUSR ) +
                 self._rwx ( self.mode & stat.S_IRGRP,
                             self.mode & stat.S_IWGRP,
                             self.mode & stat.S_IXGRP ) +
                 self._rwx ( self.mode & stat.S_IROTH,
                             self.mode & stat.S_IWOTH,
                             self.mode & stat.S_IXOTH ) )

    def _rwx ( self, r, w, x ):
        return ( self._dasher ( r, "r" ) +
                 self._dasher ( w, "w" ) +
                 self._dasher ( x, "x" ) )

    def _dasher ( self, b, c ):
        if b:
            return c
        else:
            return "-"

    def _modTime ( self ):
        return time.strftime ( "%Y-%m-%d %H:%M:%S",
                               time.localtime ( self.stat[stat.ST_MTIME] ) )

    def size ( self ):
        return self.stat[stat.ST_SIZE]

    def ownerCanRead ( self ):
        return self.mode & stat.S_IRUSR

    def ownerCanWrite ( self ):
        return self.mode & stat.S_IWUSR

    def ownerCanExec ( self ):
        return self.mode & stat.S_IXUSR

    def groupCanRead ( self ):
        return self.mode & stat.S_IRGRP

    def groupCanWrite ( self ):
        return self.mode & stat.S_IWGRP

    def groupCanExec ( self ):
        return self.mode & stat.S_IXGRP

    def worldCanRead ( self ):
        return self.mode & stat.S_IROTH

    def worldCanWrite ( self ):
        return self.mode & stat.S_IWOTH

    def worldCanExec ( self ):
        return self.mode & stat.S_IXOTH

    def isDir ( self ):
        return stat.S_ISDIR ( self.mode )

    def isLink ( self ):
        return stat.S_ISLNK ( self.mode )

    def isFile ( self ):
        return stat.S_ISREG ( self.mode )

for root, dirs, files in os.walk("c:\\", topdown=False):
    for name in files:
        filename = join(root, name)
        print filename
        filesize = PathInfo(root).size(file)
        PathInfo(root)
        if filesize > 200:
            print filename, " : ",filesize


de fout bevindt zich in de regel " filename = join(root, name) " (onderaan)

[ Voor 5% gewijzigd door Verwijderd op 17-10-2004 20:18 ]


Verwijderd

Een zeer matige topicstart moet ik zeggen.

Affijn, volgens mijn Python interpreter zit de fout niet in de regel die jij aangaf maar in die twee regels eronder:

code:
1
filesize = PathInfo(root).size(file)


Fout:
code:
1
2
3
4
Traceback (most recent call last):
  File "C:\Temp\whoop.py", line 100, in ?
    filesize = PathInfo(root).size(file)
TypeError: size() takes exactly 1 argument (2 given)


En dat is ook logisch, want je hebt de functie size() zelf gedefiniëerd zonder extra parameters (naast de impliciete self).
Maar je aanroep is een beetje verkeerd. Je wilt natuurlijk de klasse PathInfo instantiëren met het de naam van het bestand, en niet van een directory zoals je nu doet.

Mag ik (1) gokken dat je de klasse PathInfo ergens vandaan gekopiëerd hebt en (2) suggeren dat als het alleen om bestandsgrootte gaat je de die hele klasse ditcht en gewoon met de os.stat() functie werkt?

Verwijderd

Topicstarter
ok thanks daarmee kan ik denk ik wel verder (os.stat() zal me wel verderhelpen ;))

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Verwijderd schreef op 17 oktober 2004 @ 21:30:
Mag ik (1) gokken dat je de klasse PathInfo ergens vandaan gekopiëerd hebt en (2) suggeren dat als het alleen om bestandsgrootte gaat je de die hele klasse ditcht en gewoon met de os.stat() functie werkt?
Oh my god, it's a professional!

Mag ik dan (slightly off-topic) vragen waar Python-n00bs zoals ik en KidKiller andere interessante Python-fora/sites kunnen vinden? Op GoT zijn er maar weinig Python-adepten, volgens mij.

Rustacean


Verwijderd

Misschien begrijp je me verkeerd. Het gaat me niet om de vraag, maar op de manier waarop deze gesteld was.

Om te beginnen krijgen zie ik een smak code voor mijn neus met de vraag "haal de fout er eens uit". Daar wordt je al heel erg vrolijk van, omdat de vrager nog niet eens zelf de moeite heeft genomen wat onderzoek te doen om te proberen het probleem te identificeren.

En als ik dan daarna de code zelf dan ga bekijken, zie ik vrij duidelijke fouten in gebruik die er behoorlijk op hinten dat de vrager klakkeloos code van iemand anders gekopiëerd heeft; blijkbaar de moeite nog niet neemt om te uit te zoeken hoe deze code goed te gebruiken; en vervolgens het probleem dan maar op iemand anders zijn (in dit geval: mijn, al is het natuurlijk niet aan mij persoonlijk) bord schuift.

Dus sja, sorry als ik dan een beetje geïrriteerd over kom.
Manuzhai schreef op 18 oktober 2004 @ 01:30:
[...]
Mag ik dan (slightly off-topic) vragen waar Python-n00bs zoals ik en KidKiller andere interessante Python-fora/sites kunnen vinden?
Hier, natuurlijk. Als jij er de moeite in wil steken om eerst zelf te proberen je probleem op te lossen, dan wil ik er daarna best de moeite in steken om je te [proberen te] helpen als je vastloopt.

Ik heb alleen geen zin om jouw werk voor je te doen.
Manuzhai schreef op 18 oktober 2004 @ 01:30:
Oh my god, it's a professional!
Dank je. Ik probeer er tegenwoordig echt wat aan te doen. :P

[ Voor 9% gewijzigd door Verwijderd op 18-10-2004 01:51 ]


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Verwijderd schreef op 18 oktober 2004 @ 01:50:
Dank je. Ik probeer er tegenwoordig echt wat aan te doen. :P
Misschien was mijn post niet zo sarcastisch bedoeld als jij hem interpreteert. :) Vond je post wel mooi flegmatiek opgebouwd, ofzo.

Desalniettemin: ik heb een PyDoc draaien op mijn webserver (met gewijzigde layout, niet die ranzige blauw/roze), en ik weet diveintopython.org te vinden, maar met problemen van het type "hoe doe je..." (van een wat hoger abstractieniveau) vind ik het toch wel eens lastiger om een oplossing te vinden. Google is daarbij een goede hulp gebleken, maar toch zou een site die meer op Python gericht is op een minder hoog niveau wel nuttig zijn.

Aan de andere kant: als jij het zonder kan, kan ik dat vast ook. :P

Rustacean


Verwijderd

Manuzhai schreef op 18 oktober 2004 @ 12:37:
Aan de andere kant: als jij het zonder kan, kan ik dat vast ook. :P
That's the spirit! :*)

Maar ff serieus: een forum voor Python-discussie zou wel makkelijk zijn. Maar omdat het vooral in Python erg makkelijk is om hoog-niveau plannen om te zetten in werkende code hoef ik niet te vervallen in details als "hoe bouw ik ook weer eens een verzamelingetje hiervan" of "hoe sla ik dit op". Vaak bedenk je een oplossingstrategie (die gewoon taalonafhankelijk is), en kun je die zo goed als letterlijk implementeren in Python.

Als functiereference gebruik ik de .chm van de Python manual. Daar kun je ook in zoeken, dat werkt heel erg praktisch (hij zit standaard bij de ActivePython distributie). En als ik toch tegen een implementatieprobleem aan loop dan helpt Google Groups vaak nog wel.

Oh, dat is ook nog een idee. Je kan altijd nog in comp.lang.python gaan lezen/posten. Daar is in elk geval voldoende expertise voorradig :).


En je hebt gelijk; die roze met blauwe pydoc layout is echt verschrikkelijk ;).

Verwijderd

Dit is een goede site om te beginnen:
http://www.freenetpages.co.uk/hp/alan.gauld/tutor2/

Hier staan nog meer links:
http://www.python-eggs.org/links.html


Succes

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Verwijderd schreef op 18 oktober 2004 @ 14:23:
Oh, dat is ook nog een idee. Je kan altijd nog in comp.lang.python gaan lezen/posten. Daar is in elk geval voldoende expertise voorradig :).

En je hebt gelijk; die roze met blauwe pydoc layout is echt verschrikkelijk ;).
comp.lang.python is misschien wel een idee, op Usenet zijn tenminste niet al te veel luie newbies, en wel mensen die iets kunnen (cq. waar je iets van kan leren)

Pydoc: kijk eens op http://www.manuzhai.nl/weblog/comments/pydoc/

Rustacean


Verwijderd

Die vind ik ook niet geweldig. Ik heb 'm eens omgeklust om op de MS SDK documentatie te laten lijken.

Maar uiteindelijk werkt de .chm file 20x fijner.
Pagina: 1