gpt4 book ai didi

python - urllib3.exceptions.NewConnectionError 错误在一台机器上处理但在另一台机器上不处理

转载 作者:太空狗 更新时间:2023-10-30 01:37:45 24 4
gpt4 key购买 nike

我有一个奇怪的问题。为了有一个简短的最小工作示例 (MWE),我们假设 Connect() 返回一个 urllib3.connection.HTTPConnection 对象。我们还假设如果在错误消息中发现 'magicword'(不是实际单词,但嘿,这是一个 MWE),我想忽略一些其他异常冒泡。

MWE:

try:
conn_obj = Connect()
except Exception as e: # there are some other exceptions I want to ignore
if 'magicword' not in e.message:
print 'fatal error: {}'.format(e.message)

这在我的机器上运行良好,并在遇到时打印“ fatal error ”并忽略其他异常(在这种情况下应该如此)。

但是,在同事的机器上,错误没有得到处理,而是崩溃并创建了回溯。这是我机器上的完全相同的错误,只是他不会打印和崩溃而不是被处理。我们都使用完全相同的操作系统 (Windows 7)。

显然不处理特定的异常并不理想,所以我尝试了这条路线:

from urllib3.exceptions import NewConnectionError

try:
conn_obj = Connect()
except NewConnectionError as nce:
print 'fatal error: {}'.format(e.message)
except Exception as e: # there are some other exceptions I want to ignore
if 'magicword' not in e.message:
print 'fatal error: {}'.format(e.message)

那也没用。由于某种原因,它不会在他的盒子上捕获异常。为什么异常可以在我的机器上处理,但不能在他的机器上处理?

更新:

连接对象在 pyelasticsearch 第三方库中产生。我一直都能很好地捕捉到它,但在其他机器上使用相同的代码并没有被捕捉到。这是我写的一个文件,用于测试在明确提出时是否捕获到错误:

from urllib3.exceptions import NewConnectionError

def error_test(test_num):
print '\n\n'
try:
if test_num == 1:
print 'TEST 1: See if NewConnectionError is caught specifically'
raise NewConnectionError('no pool', 'test one')
elif test_num == 2:
print 'TEST 2: See if RuntimeError is caught related to magicword'
raise RuntimeError('test two magicword catching test')
elif test_num == 3:
print 'TEST 3: See if RuntimeError is caught NOT related to magicword'
raise RuntimeError('test three')
except NewConnectionError as nce:
print 'Test 1 passed successfully.\n\n{}'.format(nce.message)
except Exception as e:
if 'magicword' not in e.message:
print 'Test 3 passed successfully.\n\n{}'.format(e.message)
else:
print 'Test 2 passed successfully.\n\n{}'.format(e.message)

error_test(1)
error_test(2)
error_test(3)

该测试在我们的两台机器上都运行良好。所以不知何故,通过让第三方库参与我们机器之间的某些东西是不一致的(这实际上是在 pyinstaller 编译的二进制文件中,所以库差异不应该发挥作用)。

最佳答案

也许您可以尝试 from elasticsearch.exceptions import ConnectionError 并用它替换您的 NewConnectionError。来自 elasticsearch 的文档 here

关于python - urllib3.exceptions.NewConnectionError 错误在一台机器上处理但在另一台机器上不处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33765360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com