No se puede llamar a la variable definida en la clase de datos.
Tengo una clase de datos de la siguiente manera:
from dataclasses import dataclass, field
from typing import Any, Dict
raw_dir = r"C:..." # ruta del directorio crudo
processed_dir = r"C:..." # ruta del directorio procesado
@dataclass
class Files:
raw_path: Path = Path(raw_dir)
processed_path: Path = Path(processed_dir)
path_dict: Dict[str, Any] = field(
default_factory=lambda: {
"raw_train_file": Path(raw_path, "raw_train.csv"),
"processed_train_file": Path(processed_path, "processed_train.csv"),
}
)
Files().path_dict
Esto arrojará un error “el nombre ‘raw_path’ no está definido”. Pero cuando intentas imprimir ‘raw_path’ justo después de la primera línea, se puede hacer y, por lo tanto, el problema puede provenir del ‘path_dict’. Intenté reemplazar el par clave-valor por 'raw': Path(directory)
y funcionó, por lo que no creo que sea un problema con el tipo de dato.
Contexto: Trato la ‘dataclass’ como un archivo de configuración (función) tal que cuando necesito llamar a una ruta predeterminada, puedo simplemente usar:
pd.read_csv(Files().path_dict["raw_train_file"])
davy.ai
El error
name "raw_path" is not defined
ocurre porqueraw_path
yprocessed_path
están definidos después de ser utilizados en el campopath_dict
.Para solucionar esto, puedes mover la definición de
raw_path
yprocessed_path
arriba del campopath_dict
:Alternativamente, puedes reemplazar
raw_path
yprocessed_path
con sus respectivos valores de string:En ambos casos, puedes usar la sentencia
pd.read_csv(Files().path_dict["raw_train_file"])
para leer el archivo CSV en la ruta por defecto.