2016-05-12 6 views
1

の引数の数を把握するために失敗し、私は、Python 2.7でスクリプトを実行している今日遭遇した奇妙な行動です:Pythonはここに私の機能

コード1:

def pprint_compare_titles (self, ts_numbers = [1], **kwargs) : 
    temp = self.compare_titles (ts_numbers, **kwargs) 
    length = [ len(max(temp[0].keys(), key = len)) ] 
    def temp_fun (x, i) : 
     try : 
      return self.ts[ts_numbers[i]].titles[x[0]] 
     except IndexError : 
      return '' 
    for i in range(0, len(temp)) : 
     length.append(temp_fun(max(temp[i].values(), 
      key = lambda x : len(temp_fun(x, i))))) 
    for k in temp[0].keys() : 
     print('| {t: <{l}} |'.format(t = k, l = length[0]) 
     + ''.join([ ' {t: <{l}} |'.format(
      t = temp_fun(temp[i][k], i), 
      l = length[i+1]) 
      for i in range(0, len(temp)) ])) 

が出力:

 45   for i in range(0, len(temp)) : 
    46    length.append(temp_fun(max(temp[i].values(), 
---> 47     key = lambda x : len(temp_fun(x, i))))) 
    48   for k in temp[0].keys() : 
    49    print('| {t: <{l}} |'.format(t = k, l = length[0]) 

TypeError: temp_fun() takes exactly 2 arguments (1 given) 

コード2:

def pprint_compare_titles (self, ts_numbers = [1], **kwargs) : 
    temp = self.compare_titles (ts_numbers, **kwargs) 
    length = [ len(max(temp[0].keys(), key = len)) ] 
    def temp_fun (x, i) : 
     try : 
      return self.ts[ts_numbers[i]].titles[x[0]] 
     except IndexError : 
      return '' 
    for i in range(0, len(temp)) : 
     length.append(temp_fun(max(temp[i].values(), 
      key = lambda x : len(temp_fun(x, i, 42))))) 
    for k in temp[0].keys() : 
     print('| {t: <{l}} |'.format(t = k, l = length[0]) 
     + ''.join([ ' {t: <{l}} |'.format(
      t = temp_fun(temp[i][k], i), 
      l = length[i+1]) 
      for i in range(0, len(temp)) ])) 

出力:これらの2つのブロック間の

 45   for i in range(0, len(temp)) : 
    46    length.append(temp_fun(max(temp[i].values(), 
---> 47     key = lambda x : len(temp_fun(x, i, 42))))) 
    48   for k in temp[0].keys() : 
    49    print('| {t: <{l}} |'.format(t = k, l = length[0]) 

TypeError: temp_fun() takes exactly 2 arguments (3 given) 

唯一の違いは、私がtemp_funに与える引数の数です。 2番目の出力は感覚的ですが、Pythonが2番目のパラメータで3つのパラメータを認識しているので、最初の出力は理解できません。

誰かが何が起こっているのか考えているなら、私は喜んでそれを取るでしょう。

+0

私の考える問題は、あなたの46行目にもあります。これは 'temp_fun'関数もあり、2の代わりに1つの引数しか取れないようです。 – xbb

+0

実際に、これを追加しなければならなかったことを忘れていました。間違って – Thrastylon

答えて

3

エラーが実際にその1の前の行で発生しているように見える:

length.append(temp_fun(max(temp[i].values(), 
        #^^^^^^^^ here 
     key = lambda x : len(temp_fun(x, i))))) 

temp_funあなたlenコールの内側には、正しい引数の数ではなく、あなたのappendコール内部temp_funを持っています。

+0

ああ、この矢印のポインタは私を盲目にしました。 – Thrastylon

+0

ええ、報告された行番号が不正確であると、デバッグ中に多くの悲しみが発生する可能性があります。このようなことは、特に1つのステートメントが複数の行にまたがって広がっている場合には、多く発生します。問題がX行にあるとPythonが判断したときには慎重にすることが賢明です。X-1行とX + 1行を確認してください;-) – Kevin

+0

@ PM2Ringこの42引数は、 – Thrastylon

関連する問題