bounty还有6天到期。回答此问题可获得+50声望奖励。IHopeItWontBeAStupidQuestion希望引起更多关注这个问题。
我找到了another SO addressing a similar problem,但没有人给我答案。
我的问题如下(重现起来更简单),创建一个名为test_file.py
的文件:
import psutil
import xlwings
def test() -> None:
my_function()
def my_function() -> None:
# Create a new workbook
wb = xlwings.Book()
# Save it
wb.save('test.xlsx')
# Close it
wb.close()
# Kill zombie processes
for proc in psutil.process_iter():
if proc.name() == "EXCEL.EXE":
proc.kill()
if __name__ == "__main__":
my_function()
当做python test_file.py
的时候,一切都很顺利。在执行pytest
来进行单元测试时,我遇到了以下错误:
test_file.py Windows fatal exception: code 0x800706ba
回溯如下:
File "C:\Users\jason\Desktop\so\test_file.py", line 6 in test
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\python.py", line 195 in pytest_pyfunc_call
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_callers.py", line 39 in _multicall
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_manager.py", line 80 in _hookexec
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_hooks.py", line 265 in __call__
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\python.py", line 1789 in runtest
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\runner.py", line 167 in pytest_runtest_call
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_callers.py", line 39 in _multicall
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_manager.py", line 80 in _hookexec
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_hooks.py", line 265 in __call__
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\runner.py", line 260 in <lambda>
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\runner.py", line 339 in from_call
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\runner.py", line 259 in call_runtest_hook
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\runner.py", line 220 in call_and_report
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\runner.py", line 131 in runtestprotocol
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\runner.py", line 112 in pytest_runtest_protocol
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_callers.py", line 39 in _multicall
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_manager.py", line 80 in _hookexec
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_hooks.py", line 265 in __call__
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\main.py", line 349 in pytest_runtestloop
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_callers.py", line 39 in _multicall
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_manager.py", line 80 in _hookexec
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_hooks.py", line 265 in __call__
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\main.py", line 324 in _main
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\main.py", line 270 in wrap_session
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\main.py", line 317 in pytest_cmdline_main
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_callers.py", line 39 in _multicall
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_manager.py", line 80 in _hookexec
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_hooks.py", line 265 in __call__
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\config\__init__.py", line 167 in main
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\config\__init__.py", line 190 in console_main
File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Scripts\pytest.exe\__main__.py", line 7 in <module>
File "<frozen runpy>", line 88 in _run_code
File "<frozen runpy>", line 198 in _run_module_as_main
这一定是pytest
,xlwings
,psutil
之间的问题,因为如果我不同时使用这三个,我就不能重现这个bug。
我正在使用Python 3.11.1
、xlwings==0.28.6
、pytest==7.2.2
和psutil==5.9.4
。
使用@moken建议的上下文管理器也不起作用:
import xlwings
def test() -> None:
my_function()
def my_function() -> None:
with xlwings.App(visible=True):
# Create a new workbook
wb = xlwings.Book()
# Save it
wb.save('test.xlsx')
# Close it
wb.close()
if __name__ == "__main__":
my_function()
会引发完全相同的错误(当使用pytest
时,当不使用时,显然一切都正常)。
1条答案
按热度按时间cbjzeqam1#
您可以尝试使用-s标志运行测试,这将禁用输出捕获。这可能会为您提供有关导致异常的原因的更多信息。
如果这不起作用,您可能需要向我们提供有关您收到的特定错误消息的更多信息,以及它发生的上下文(例如Python版本)。
您还可以对要运行的函数
my_function()
进行更具体的说明。这一定是pytest、xlwings和psutil之间的问题,因为如果我不同时使用这三个,我就不能重现这个bug。
尝试其他方法也可以帮助您。