0

私はpythonにかなり慣れていません...

 import sys, os, time, py4chan, urllib from urllib2 import urlopen, URLError, HTTPError

 def refreshthread(boardin,no):
     global thread
     global topic
     board = py4chan.Board(boardin)
     thread = board.getThread(int(no))
     topic = thread.topic
     time.sleep(2.5)

 def dlfile(url, folder):

     try:
         f = urlopen(url)

         with open(folder + "/" + os.path.basename(url), "wb") as local_file:
             local_file.write(f.read())
             print "Downloaded to " + str(folder + "/" + os.path.basename(url)) 

     except HTTPError, e:
         print "HTTP Error:", e.code, url
     except URLError, e:
         print "URL Error:", e.reason, url

 def getsize(uri):
     file = urllib.urlopen(uri)
     size = file.headers.get("content-length")
     file.close()
     return str(int(size) / 1024)

 def main():
     boardtag = str(raw_input("Board: "))
     threadno = int(raw_input("Thread id: "))
     folder = str(raw_input("Save to folder: "))
     print "Getting thread information..."
     refreshthread(boardtag,threadno)
     print "Subject: " + topic.Subject
     while(True):
         if not os.path.exists(folder): os.makedirs(folder)
         refreshthread(boardtag,threadno)
         for imgurl in thread.Files():
             if imgurl is not None and not os.path.exists(folder + "/" + os.path.basename(imgurl)):
                 print "A wild image appears! " + "(" + getsize(imgurl) + "kb)" 
                 dlfile(imgurl,folder)
             else:
                 pass

 if __name__ == '__main__':
     main()

これを Linux でコーディングしたところ、問題なく動作しましたが、これを Windows で実行すると、次のエラーが発生します。

TypeError: __init__() takes exactly 4 arguments (2 given)

initを定義していないので、これは非常に奇妙です。これは別のモジュールからの初期化でしょうか?

他のスクリプトをコーディングすると、py4chan モジュールは正常に動作するようです。両方のマシンの python バージョンも同じです。

編集(完全なエラー):

Getting thread information...
Traceback (most recent call last):
  File "4chan.py", line 59, in <module>
    main()
  File "4chan.py", line 46, in main
    refreshthread(boardtag,threadno)
  File "4chan.py", line 15, in refreshthread
    board = py4chan.Board(boardin)
TypeError: __init__() takes exactly 4 arguments (2 given)

*編集: *さて、同じ名前の 2 つの異なるモジュールがありました。すべてが機能しています。私はこのウェブサイトで許可されるべきではありません。

4

3 に答える 3

0

一見すると/、2 つの場所でディレクトリ セパレータとしてハードコードされているように見えます。Windows では、ディレクトリ セパレータは\.

于 2012-11-13T21:46:15.027 に答える
0

http://py4chan.sourceforge.net/から取得した py4chan モジュールには、次の定義がありBoard.__init__ます。

class Board:
    def __init__(self, base_url, post_url, filesize):

これには 4 つの引数 (暗黙の を含む) が必要なため、引数と引数がありselfません(それらが何であれ)。post_urlfilesize

于 2012-11-13T21:47:02.560 に答える
0

クラスは、py4chan.Board1 つではなく 3 つの引数で構築する必要があります。refreshthread関数内の次の行:

board = py4chan.Board(boardin)

これは何かに見えるはずです:

board = py4chan.Board(base_url, post_url, filesize)
于 2012-11-13T21:47:09.477 に答える