by Guest » 04 Jan 2025, 04:04
Ich versuche, die Variable __file__ innerhalb einer Klasse mit exec() und pathlib in Python 3.11.2 zu verwenden...was mir bisher nicht gelungen ist. Die Antwort auf meine Versuche war immer „Keine“ oder eine Fehlermeldung.
Der Beispielcode, den ich auszuführen versuche:
Code: Select all
import pathlib
class Exec_and_Path_problem:
EXEC_STRING = "pathlib.Path(__file__).with_name(filename)"
def __init__(self, filename):
self.filename = filename
def the_full_filepath(self):
return exec(Exec_and_Path_problem.EXEC_STRING, \
{'pathlib': pathlib, '__file__': __file__}, {'filename': self.filename})
where_is = Exec_and_Path_problem('myfile.txt')
print(where_is.the_full_filepath(), '?')
Das Hauptproblem etwas einfacher:
Code: Select all
print(exec(f"pathlib.Path('{__file__}')", {'pathlib': pathlib}, {'__file__': __file__})) # --> None
Mein Ziel ist eine Zeichenfolge (
), der als globale Klassenvariable angegeben werden kann.
Nach einiger Zeit des Ausprobierens gehen mir jetzt die Ideen aus, wie ich es zum Laufen bringen könnte.
Irgendeine bessere(!) Idee?
Ich versuche, die Variable __file__ innerhalb einer Klasse mit exec() und pathlib in Python 3.11.2 zu verwenden...was mir bisher nicht gelungen ist. Die Antwort auf meine Versuche war immer „Keine“ oder eine Fehlermeldung.
Der Beispielcode, den ich auszuführen versuche:
[code]import pathlib
class Exec_and_Path_problem:
EXEC_STRING = "pathlib.Path(__file__).with_name(filename)"
def __init__(self, filename):
self.filename = filename
def the_full_filepath(self):
return exec(Exec_and_Path_problem.EXEC_STRING, \
{'pathlib': pathlib, '__file__': __file__}, {'filename': self.filename})
where_is = Exec_and_Path_problem('myfile.txt')
print(where_is.the_full_filepath(), '?')
[/code]
Das Hauptproblem etwas einfacher:
[code]print(exec(f"pathlib.Path('{__file__}')", {'pathlib': pathlib}, {'__file__': __file__})) # --> None
[/code]
Mein Ziel ist eine Zeichenfolge ([code]EXEC_STRING[/code]), der als globale Klassenvariable angegeben werden kann.
Nach einiger Zeit des Ausprobierens gehen mir jetzt die Ideen aus, wie ich es zum Laufen bringen könnte.
Irgendeine bessere(!) Idee?