1. ホーム
  2. python

[解決済み] TypeError: 'builtin_function_or_method' オブジェクトは添え字なしです。

2022-02-15 21:47:35

質問

このコードを実行すると、Pythonインタープリターから変なエラーが出るんだけど。

def make_map():
    map = [[Tile(0, 0) for col in range(MAP_WIDTH)] for row in range(MAP_HEIGHT)]

    for x in range(MAP_WIDTH):
        for y in range(MAP_HEIGHT):     
            map[x][y].tileType = round((libtcod.noise_perlin(noise2d,[y/MAP_WIDTH,x/MAP_HEIGHT])*100), 0)

ターミナルでこれを返しています。

TypeError: 'builtin_function_or_method' object is unsubscriptable 

また、トレースバックはこの関数を指しています。

def render_all():
    global color_light_wall
    global color_light_ground

    #go through all tiles, and set their background color
    for y in range(MAP_HEIGHT):
        for x in range(MAP_WIDTH):
            tileType = map[x][y].tileType
            if tileType>30:
                libtcod.console_set_back(con, x, y, color_dark_wall, libtcod.BKGND_SET )
            else:
                libtcod.console_set_back(con, x, y, color_dark_ground, libtcod.BKGND_SET )

    #draw all objects in the list
    for object in objects:
        object.draw()

    #blit the contents of "con" to the root console
    libtcod.console_blit(con, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0, 0)

どちらもこの行に関係していると思うのですが。 tileType = map[x][y].tileType が、もし誰かがこれについて何か光を与えてくれるなら、私はそれを感謝します。

エリオット・ボンヌビルさん、ありがとうございます。

EDIT: 私のTileクラスのコードと完全なトレースバックを含めるのを忘れました。

class Tile:
    #a tile of the map and its properties
    def __init__(self, tileType, blocked):
        self.tileType = tileType
        self.blocked = blocked

トレースバックです。

  File "kindred.py", line 123, in <module>
    render_all()
  File "kindred.py", line 64, in render_all
    tileType = map[x][y].tileType
TypeError: 'builtin_function_or_method' object is unsubscriptable

解決方法は?

このエラーは、pythonが変数名 "map"を tileType = map[x][y].tileType が、どこにも見つからなかったので、関数でビルドを取得したのです。 地図 これは、エラーメッセージを説明する組み込み関数であるため、添え字を付けられないのです。

TypeError: 'builtin_function_or_method' object is unsubscriptable 

アドバイスとしては、まず変数名を "map" から任意のものに変更し、組み込み関数をシャドウしないようにすることです。 NameError のエラーは、変数が定義されていないためなので、それを修正する必要があります。

うまくいくといいのですが、参考になれば幸いです。)