es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Se ha producido una excepción: AttributeError ‘NoneType’ el objeto no tiene el atributo ‘split’. Al depurar con Docker y VSCode.

Estoy configurando un depurador utilizando docker-compose siguiendo esta guía. He modificado el archivo manage.py para ejecutar debugpy cuando existe setting.DEBUG, pero al leer el archivo de configuración arroja una excepción de 'NoneType' object has no attribute 'split'.

Aquí están los archivos que estoy utilizando:

.env.dev

DEBUG=1
SECRET_KEY=foo
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 0.0.0.0[::1]

manage.py

#!/usr/bin/env python
"""Utilidad de línea de comandos de Django para tareas administrativas."""
import os
import sys


def main():
    """Ejecutar tareas administrativas."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'zapping.settings')

    # inicio de nueva sección
    from django.conf import settings

    if settings.DEBUG:
        if os.environ.get('RUN_MAIN') or os.environ.get('WERKZEUG_RUN_MAIN'):
            import debugpy
            debugpy.listen(("0.0.0.0", 5678))
            print('¡Adjunto!')
    # fin de nueva sección


    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "No se pudo importar Django. ¿Estás seguro de que está instalado y "
            "disponible en tu variable de entorno PYTHONPATH? ¿Olvidaste activar un entorno virtual?"
        ) from exc
    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    main()

¿Alguna idea?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar relacionado con la variable de entorno DJANGO_SETTINGS_MODULE que no está configurada correctamente. Es probable que os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'zapping.settings') no esté encontrando el módulo de configuración correcto y esté utilizando None como alternativa.

    Para depurar esto, puedes agregar un statement de impresión para verificar el valor de os.environ['DJANGO_SETTINGS_MODULE']:

    def main():
        ...
        print(os.environ['DJANGO_SETTINGS_MODULE'])
        # empezar una nueva sección
        from django.conf import settings
        ...
    

    Esto te ayudará a confirmar si la variable está configurada correctamente o no.

    Si la variable no está configurada correctamente, puedes intentar configurarla explícitamente en tu archivo docker-compose:

    version: '3'
    services:
      web:
        build: .
        environment:
          - DEBUG=${DEBUG}
          - DJANGO_SETTINGS_MODULE=zapping.settings
        command: python manage.py runserver 0.0.0.0:8000
        ports:
          - "8000:8000"
    

    Ten en cuenta la adición de la variable de entorno DJANGO_SETTINGS_MODULE. También puedes eliminar la línea os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'zapping.settings') de la función main().

    Si sigues encontrando problemas, intenta depurar el código con los statements de impresión y ve de dónde proviene el problema. Es posible que haya otros problemas con tu archivo de configuración o con otras partes de tu configuración de Django.

Comments are closed.