Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Python Write Better Python Buggy Logs Logging

Anthony Grodowski
Anthony Grodowski
4,902 Points

AttributeError: module 'logging' has no attribute 'basicConfig'

Why am I getting that error even tho I have everything the same as Kenneth?

import logging
import random

logging.basicConfig(filename='game.log', level=logging.DEBUG)

player = {'location': None, 'path': []}
cells = [(0, 0), (0, 1), (0, 2),
         (1, 0), (1, 1), (1, 2),
         (2, 0), (2, 1), (2, 2)]

def get_locations():
    monster = random.choice(cells)
    door = random.choice(cells)
    start = random.choice(cells)

    if monster == door or monster == start or door == start:
        monster, door, start = get_locations()

    return monster, door, start


def get_moves(player):
    moves = ['LEFT', 'RIGHT', 'UP', 'DOWN']
    if player in [(0, 0), (1, 0), (2, 0)]:
        moves.remove('LEFT')
    if player in [(0, 0), (0, 1), (0, 2)]:
        moves.remove('UP')
    if player in [(0, 2), (1, 2), (2, 2)]:
        moves.remove('RIGHT')
    if player in [(2, 0), (2, 1), (2, 2)]:
        moves.remove('DOWN')
    return moves


def move_player(player, move):
    x, y = player['location']
    player['path'].append((x, y))
    if move == 'LEFT':
        player['location'] = x, y - 1
    elif move == 'UP':
        player['location'] = x - 1, y
    elif move == 'RIGHT':
        player['location'] = x, y + 1
    elif move == 'DOWN':
        player['location'] = x + 1, y
    return player


def draw_map():
    print(' _ _ _')
    tile = '|{}'
    for idx, cell in enumerate(cells):
        if idx in [0, 1, 3, 4, 6, 7]:
            if cell == player['location']:
                print(tile.format('X'), end='')
            elif cell in player['path']:
                print(tile.format('.'), end='')
            else:
                print(tile.format('_'), end='')
        else:
            if cell == player['location']:
                print(tile.format('X|'))
            elif cell in player['path']:
                print(tile.format('.|'))
            else:
                print(tile.format('_|'))


monster, door, player['location'] = get_locations()
logging.info('monster: {}; door: {}; player: {}'.format(
        monster, door, player['location']))

while True:
    moves = get_moves(player['location'])
    print("Welcome to the dungeon!")
    print("You're currently in room {}".format(player['location']))

    draw_map()

    print("\nYou can move {}".format(', '.join(moves)))
    print("Enter QUIT to quit")

    move = input("> ")
    move = move.upper()

    if move == 'QUIT':
        break

    if not move in moves:
        print("\n** Walls are hard! Stop running into them! **\n")
        continue

    player = move_player(player, move)
    if player['location'] == door:
        print("\n** You escaped! **\n")
        break
    elif player['location'] == monster:
        print("\n** You got eaten! **\n")
        break
    else:
        continue

1 Answer

Eric M
Eric M
11,545 Points

Hi Anthony,

You may have another file called logging.py or logging.pyc in your path that is being picked up ahead of the builtin core Python logging library.

If you add print(logging.__file__) right after your imports, before the logging.basicConfig line, what gets printed out?

In your position I'd try to recreate this project in a new virtual environment. This is easiest via an IDE like PyCharm, where you can go to Preferences -> Project Preferences -> Project Interpreter then click on the dropdown, select Show All then click the plus sign to add a new virtual environment for the project.

If you want to do it manually there are a lot of tutorials online for using pyenv to do this.

This will give a clean environment for the project and hopefully avoid whatever is prevent you from interacting with the desired logging library. It's also a good habit to get into to keep dependencies separated between projects - to avoid issues like this.

Best of luck,

Eric

boi
boi
14,241 Points

Nice catch 👍