AttributeError: 'ChannelFileWrite' object has no attribute 'encoding'
評估
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 新手友好度
- 42/100
- Issue 類型
- 缺陷
- 描述清晰度
- 基本清楚
- 活躍度
- 停滯
- 技術堆疊
- python
研究方向
在安裝了 execnet、pytest-xdist 和 teamcity-messages 的情況下重現此故障,從 execnet 的 gateway_base.py 和 traceback 中的 ChannelFileWrite 物件開始。檢查讀取 sys.stdout.encoding 的 teamcity/common.py,然後分別在有和沒有 teamcity-messages 的情況下執行受影響的 pytest-xdist 測試。當 plugin 能在不出現此 AttributeError 的情況下載入,且測試通過時,即表示完成。
由索引模型根據 Issue 內容生成。
描述
When I try to run testsuite for pytest-xdist and both execnet and teamcity-messages are installed few tests fails with errors like:
__________________ TestRemoteControl.test_failures_somewhere ___________________
self = <test_looponfail.TestRemoteControl object at 0x7fffaa00c7c0>
pytester = <Pytester PosixPath('/tmp/pytest-of-marcel/pytest-10/test_failures_somewhere0')>
def test_failures_somewhere(self, pytester: pytest.Pytester) -> None:
item = pytester.getitem("def test_func():\n assert 0\n")
control = RemoteControl(item.config)
control.setup()
> failures = control.runsession()
$(BLDDIR)/testing/test_looponfail.py:126:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
$(INSTDIR)/usr/lib/python3.9/vendor-packages/xdist/looponfail.py:117: in runsession
return self.channel.receive()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <Channel id=1 closed>, timeout = None
def receive(self, timeout=None):
"""receive a data item that was sent from the other side.
timeout: None [default] blocked waiting. A positive number
indicates the number of seconds after which a channel.TimeoutError
exception will be raised if no item was received.
Note that exceptions from the remotely executing code will be
reraised as channel.RemoteError exceptions containing
a textual representation of the remote traceback.
"""
itemqueue = self._items
if itemqueue is None:
raise IOError("cannot receive(), channel has receiver callback")
try:
x = itemqueue.get(timeout=timeout)
except self.gateway.execmodel.queue.Empty:
raise self.TimeoutError("no item after %r seconds" % timeout)
if x is ENDMARKER:
itemqueue.put(x) # for other receivers
> raise self._getremoteerror() or EOFError()
E execnet.gateway_base.RemoteError: Traceback (most recent call last):
E File "/usr/lib/python3.9/vendor-packages/execnet/gateway_base.py", line 1088, in executetask
E function(channel, **kwargs)
E File "$(INSTDIR)/usr/lib/python3.9/vendor-packages/xdist/looponfail.py", line 171, in init_worker_session
E config = Config.fromdictargs(option_dict, list(args))
E File "/usr/lib/python3.9/vendor-packages/_pytest/config/__init__.py", line 1110, in fromdictargs
E config.parse(args, addopts=False)
E File "/usr/lib/python3.9/vendor-packages/_pytest/config/__init__.py", line 1346, in parse
E self._preparse(args, addopts=addopts)
E File "/usr/lib/python3.9/vendor-packages/_pytest/config/__init__.py", line 1229, in _preparse
E self.pluginmanager.load_setuptools_entrypoints("pytest11")
E File "/usr/lib/python3.9/vendor-packages/pluggy/_manager.py", line 287, in load_setuptools_entrypoints
E plugin = ep.load()
E File "/usr/lib/python3.9/importlib/metadata.py", line 86, in load
E module = import_module(match.group('module'))
E File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
E return _bootstrap._gcd_import(name[level:], package, level)
E File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
E File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
E File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
E File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
E File "/usr/lib/python3.9/vendor-packages/_pytest/assertion/rewrite.py", line 168, in exec_module
E exec(co, module.__dict__)
E File "/usr/lib/python3.9/vendor-packages/teamcity/pytest_plugin.py", line 22, in <module>
E from teamcity.common import convert_error_to_string, dump_test_stderr, dump_test_stdout
E File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
E File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
E File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
E File "/usr/lib/python3.9/vendor-packages/_pytest/assertion/rewrite.py", line 168, in exec_module
E exec(co, module.__dict__)
E File "/usr/lib/python3.9/vendor-packages/teamcity/common.py", line 19, in <module>
E _sys_stdout_encoding = sys.stdout.encoding
E AttributeError: 'ChannelFileWrite' object has no attribute 'encoding'
/usr/lib/python3.9/vendor-packages/execnet/gateway_base.py:749: RemoteError
With teamcity-messages uninstalled these tests pass.
- 主要語言
- Python
- 星號
- 103
- 分支
- 50
- 平均合併
- 5 天 12 小時
- 30 天內合併 PR
- 4
環境準備
這個專案沒有提供開發容器、Dockerfile 或貢獻指南,環境需要你自己搭建:先看它的 README,通用步驟見我們的新手貢獻指南。
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
pytest-dev/execnet 的其他 Issue
-
難度 4/5 3-5 天 新手友好度 45/100
pytest-dev/execnet#374 · 3 則留言 ·
-
難度 3/5 1-2 天 新手友好度 45/100
pytest-dev/execnet#306 · 1 則留言 ·
-
難度 4/5 3-5 天 新手友好度 35/100
pytest-dev/execnet#279 · 1 個 reaction ·
-
Exception ignored in atexit callback / RuntimeError: can't create new thread at interpreter shutdown可能重新可做 @RonnyPfannschmidt 於 910 天前認領,目前沒有進行中的 PR。 未關閉bug
pytest-dev/execnet#271 · 4 則留言 · 已指派 1 人 ·
-
難度 5/5 一週以上 新手友好度 10/100
pytest-dev/execnet#205 ·
查看 pytest-dev/execnet 的全部 Issue
相似的 Issue
-
needs triage
難度 2/5 1-3 小時 新手友好度 83/100
darnitdevorg/darnit#587 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 67/100
維護者通常 1 天內回覆
-
accessibility good first issue
難度 1/5 1-3 小時 新手友好度 92/100
維護者通常 1 天內回覆
-
llm translation
難度 2/5 1-3 小時 新手友好度 76/100
維護者通常 1 天內回覆
-
bug bug-hunt
難度 2/5 1-3 小時 新手友好度 74/100
維護者通常 1 天內回覆