VS утверждает, что оба аргумента в вызове метода выше имеют объект типа, тогда как метод принимает только Func. Но значение обоих элементов рабочего листа имеет тип Func
blockquote>Да, но объявленный тип -
object
. Компилятор не может знать, что фактический тип выполнения будетFunc<object>
, поэтому необходим явный приведение.
Вы можете использовать contextlib
.
from contextlib import contextmanager
import sys
@contextmanager
def stdout_redirector():
class MyStream:
def write(self, msg):
prefix = 'augmented:' if msg.strip() else ''
old_stdout.write( prefix + msg)
def flush(self):
old_stdout.flush()
old_stdout = sys.stdout
sys.stdout = MyStream()
try:
yield
finally:
sys.stdout = old_stdout
Лучше использовать оператор with
для управления перенаправлением. Если это невозможно в вашем случае, вызов методов __enter__()
и __exit__()
объекта перенаправителя также работает. Вы также можете поместить эти коды перенаправителя в функцию-ловушку pre_run_cell
и post_run_cell
в IPython.