cre8cre8
AskMe♥

str を全く使った覚えがないのに
[TypeError: 'str' object is not callable] がでてドハマリした結果、 str を使っていたのを見失っていた午後7時くらいのできごと

それはそれは、とても一生懸命社畜ってた木曜日に起きたとっても悲しい事件

諸君、いつも見てくれてありがとう!社畜リエイターのたくみんだ。

まずは、なにも考えずにこのコードを見ていただきたい。

environment.py
1class Environment:
2
3    def __init__(self, domain="https://cre8cre8.com"):
4        self.domain = domain
5        self.articles_path = 'dummy'
6
7    def rootpath(self):
8        return 'this/is/'
9
10    def articles_path(self):
11        return self.rootpath() + 'test'

そして、これがこのクラスのテストコードである。

environment_test.py
1import os
2
3import unittest
4import environment
5
6class EnvironmentTest(unittest.TestCase):
7
8    def test_article_path(self):
9        env = environment.Environment()
10        expected_path = '/this/is/test'
11        self.assertEqual(expected_path, env.articles_path())

そのテスト結果がこれだよ!www

Shell
1$ python3 -m unittest environment_test.py
2E
3======================================================================
4ERROR: test_article_path (environment_test.EnvironmentTest)
5----------------------------------------------------------------------
6Traceback (most recent call last):
7  File "/Users/takumi/tmp/environment_test.py", line 11, in test_article_path
8    self.assertEqual(expected_path, env.articles_path())
9TypeError: 'str' object is not callable
10
11----------------------------------------------------------------------
12Ran 1 test in 0.001s
13
14FAILED (errors=1)
15$

…(´^ω^`)ワロチ
Oh! My GOD!! Help me ERO-I HITO!
しばらくこのエラーと格闘していた私は私は大きな過ちを犯していたことに気づいた。
親愛なるPython使いの君たちならもうわかるだろう。
そう。ここを見てくれ。

原因箇所

environment.py
1class Environment:
2
3    def __init__(self, domain="https://cre8cre8.com"):
4        self.domain = domain
5        self.articles_path = 'dummy'
6
7    def rootpath(self):
8        return 'this/is/'
9
10    def articles_path(self):
11        return self.rootpath() + 'test'

5行目と10行目に注目していただきたい。
God is dead... (神は死んだ)
頭に衝撃が走った。と同時に インスタンス変数 self.articles_path を定義し、かつ 'dummy' という文字列をご丁寧に代入していた 私をさらに呪った。
そりゃ TypeError: 'str' object is not callable ってでるわけですね。
ご丁寧に 'dummy' って文字列(str)設定してるんだから…(。>﹏<)ウゥ…

今後の対策とか己への戒めとか、まとめてきなアレ。

その一 同じ命名は使わないし、使わせない ように気をつけようと思います

その弐 なにかダミー値を設定する場合は、もうちょっとわかりやすいのをいれる
でも、 None は微妙だしなぁ…なにかGoodな方法があったら教えてエロい人。

Pythonを書いて職場で知的な人アピールしようと思った結果がこれだよwww
この記事がお役に立てるように、お祈りしています…
同じような悲しくて不幸な犠牲者は、これ以上増やしてはいけないんだっ!!

ちょっとしゃべり口調がおかしいのは、主に疲労のせいです。
気にしないでください。だいたい、私とリアルに喋るとこんな感じです "笑
それでは、読んでいただきありがとうございました。 (*・ω・)ノシ See you again soon!!

≪ 前の記事
【コピペでできる!】Railsでless.jsを使いたかったのでシェルスクリプト作ってワンライナーでできるようにしてみた。
次の記事 ≫
自分のIPアドレスしかアクセスできないようにして
AWS(AmazonLinux)EC2に開発用WordPressをインストールする

いいねやコメントを送っていただけると中の人がしっぽ振って大喜びします♪

あなたへのおすすめの記事