python eval(repr(file_handle)) завершается ошибкой synax

#python #eval #filehandle #repr

Вопрос:

Я пытаюсь передать дескриптор файла через некоторые обручи, которые приводят к тому, что я хочу передать дескриптор файла по мере его повторения, чтобы позже вернуть его к существованию. Но я столкнулся с проблемой. Встроенный повтор для дескрипторов файлов сломан!

 $ python3
Python 3.9.4 (default, Apr  6 2021, 00:00:00) 
[GCC 10.2.1 20201125 (Red Hat 10.2.1-9)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open("x.out","a")
>>> f_copy = eval(repr(f))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1
    <_io.TextIOWrapper name='x.out' mode='a' encoding='UTF-8'>
    ^
SyntaxError: invalid syntax
>>> 
 

Я не могу найти ничего, что подразумевало бы, что мне придется создать свой собственный подкласс ввода-вывода.TextIOWrapper или что-то в этом роде. Что я упускаю?

Комментарии:

1. Это не то, что repr делает. Он просто создает строку с некоторой информацией об объекте в соответствии со своим методом repr . Вы не можете воспроизвести объект только на основе строки.

2. Если объект имеет буквальное представление, repr() предполагается, что он вернет его. Но не все объекты имеют литералы. В этих случаях принято использовать <> обозначения, и ожидается ошибка.

3. Что бы вы ни пытались сделать с дескриптором файла, это не лучший способ сделать это. Ты понимаешь, что пытаешься сделать?

4. @хелвуд, на самом деле, я знаю, что я пытаюсь с этим сделать. Я пытаюсь передать дескриптор файла в функцию starmap_async. Однако это до смерти давится ручкой файла и даже не вызывает работника. Итак, я пытался использовать очевидный питонический метод eval(repr(x)).

5. Я предполагаю, что у нас разное понимание того, что очевидно и питонически.