나는 보통 예외를 잡는 데 꽤 능숙하지만이 그룹은 나에게 당황 스럽다. 여기에 내가 함께 일하고 있어요 코드 (이 pywinrm 사용)입니다 :여러 예외를 어떻게 잡을 수 있습니까?
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/connection.py", line 142, in _new_conn
(self.host, self.port), self.timeout, **extra_kw)
File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/util/connection.py", line 91, in create_connection
raise err
File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/util/connection.py", line 81, in create_connection
sock.connect(sa)
socket.timeout: timed out
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/connection.py", line 142, in _new_conn
(self.host, self.port), self.timeout, **extra_kw)
File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/util/connection.py", line 91, in create_connection
raise err
File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/util/connection.py", line 81, in create_connection
sock.connect(sa)
socket.timeout: timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/connectionpool.py", line 578, in urlopen
chunked=chunked)
File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/connectionpool.py", line 362, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/usr/lib/python3.5/http/client.py", line 1106, in request
self._send_request(method, url, body, headers)
File "/usr/lib/python3.5/http/client.py", line 1151, in _send_request
self.endheaders(body)
File "/usr/lib/python3.5/http/client.py", line 1102, in endheaders
self._send_output(message_body)
File "/usr/lib/python3.5/http/client.py", line 934, in _send_output
self.send(msg)
File "/usr/lib/python3.5/http/client.py", line 877, in send
self.connect()
File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/connection.py", line 167, in connect
conn = self._new_conn()
File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/connection.py", line 147, in _new_conn
(self.host, self.timeout))
requests.packages.urllib3.exceptions.ConnectTimeoutError: (<requests.packages.urllib3.connection.HTTPConnection object at 0x7fc019afed30>, 'Connection to **** timed out. (connect timeout=30)')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/requests/adapters.py", line 403, in send
timeout=timeout
File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/connectionpool.py", line 623, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/util/retry.py", line 281, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
requests.packages.urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='****', port=5985): Max retries exceeded with url: /wsman (Caused by ConnectTimeoutError(<requests.packages.urllib3.connection.HTTPConnection object at 0x7fc019afed30>, 'Connection to **** timed out. (connect timeout=30)'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "bulletin_parse.py", line 258, in <module>
win_Upgrade_Check(kbByOS)
File "bulletin_parse.py", line 247, in win_Upgrade_Check
resp = conn.run_ps("get-hotfix -id {0}".format(kb))
File "/usr/local/lib/python3.5/dist-packages/winrm/__init__.py", line 54, in run_ps
rs = self.run_cmd('powershell -encodedcommand {0}'.format(encoded_ps))
File "/usr/local/lib/python3.5/dist-packages/winrm/__init__.py", line 41, in run_cmd
shell_id = self.protocol.open_shell()
File "/usr/local/lib/python3.5/dist-packages/winrm/protocol.py", line 132, in open_shell
res = self.send_message(xmltodict.unparse(req))
File "/usr/local/lib/python3.5/dist-packages/winrm/protocol.py", line 207, in send_message
return self.transport.send_message(message)
File "/usr/local/lib/python3.5/dist-packages/winrm/transport.py", line 173, in send_message
response = self.session.send(prepared_request, timeout=self.read_timeout_sec)
File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 585, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/requests/adapters.py", line 459, in send
raise ConnectTimeout(e, request=request)
requests.exceptions.ConnectTimeout: HTTPConnectionPool(host='****', port=5985): Max retries exceeded with url: /wsman (Caused by ConnectTimeoutError(<requests.packages.urllib3.connection.HTTPConnection object at 0x7fc019afed30>, 'Connection to **** timed out. (connect timeout=30)'))
내 현재 코드에서 볼 수 있듯이 : 여기
import socket
def win_Upgrade_Check(kbByOS):
for os in kbByOS:
print(os)
try:
conn = winrm.Session(os, auth=("administrator","****"))
for kb in kbByOS[os]:
resp = conn.run_ps("get-hotfix -id {0}".format(kb))
output = resp.std_out.decode('utf-8')
error = resp.std_err
if error:
print("KB{} not found on {}.".format(error,os))
else:
print("{} found on {}.".format(kb,os))
except timeout as e:
print(e)
pass
오류 I 받고있어 현재의 단어 구토입니다 , 나는 socket.timeout을 먼저 잡으려고했다. 나는 또한 Exception을 e로 변경하려고 시도했다. catch가 모두 현재 가지고있는 것보다 나을 것이라고 생각했지만 실패했다. requests.exceptions.ConnectTimeout에 대한 예외를 추가하기 위해 transport.py를 편집 해 보았습니다. 그러나이 중 하나를 catch하지는 않습니다.
여러 예외가 발생 했으므로 수행해야 할 특별한 것이 있습니까?
try:
doMyFavoriteThing()
except ValueError:
print "Whoops!"
except timeout:
print "Whoopsies!"
except MaxRetryError:
print "Whoopsie daisies!"
을 아니면 모든 예외가 Exception
클래스의 하위 클래스이기 때문에, 모든 예외를 포착하려는 경우, 당신은이 작업을 수행 할 수 있습니다 :