urllib exception http.client.BadStatusLine

匿名 (未验证) 提交于 2019-12-03 01:00:01

问题:

I can't for the life of me figure out why I can't catch this exception.

Looking here at this guide.

def get_team_names(get_team_id_url, team_id):     print(get_team_id_url + team_id)     try:         response = urllib.request.urlopen(get_team_id_url + team_id)     except urllib.error.HTTPError as e:         print(e.code)         print(e.read())      except urllib.error.URLError as e:         print(e.code)         print(e.read())  

exception:

Traceback (most recent call last):   File "queue_cleaner_main.py", line 60, in <module>     sys.exit(main())   File "queue_cleaner_main.py", line 57, in main     team_names_to_contact = queue_cleaner_functions.get_team_names(SERVICE_NOW_TEAM_NAME_URL, team[2])   File "D:\oppssup\old_job\queue_cleaner_functions.py", line 132, in get_team_names     response = urllib.request.urlopen(get_team_id_url + team_id)   File "C:\Python34\lib\urllib\request.py", line 153, in urlopen     return opener.open(url, data, timeout)   File "C:\Python34\lib\urllib\request.py", line 455, in open     response = self._open(req, data)   File "C:\Python34\lib\urllib\request.py", line 473, in _open     '_open', req)   File "C:\Python34\lib\urllib\request.py", line 433, in _call_chain     result = func(*args)   File "C:\Python34\lib\urllib\request.py", line 1202, in http_open     return self.do_open(http.client.HTTPConnection, req)   File "C:\Python34\lib\urllib\request.py", line 1177, in do_open     r = h.getresponse()   File "C:\Python34\lib\http\client.py", line 1172, in getresponse     response.begin()   File "C:\Python34\lib\http\client.py", line 351, in begin     version, status, reason = self._read_status()   File "C:\Python34\lib\http\client.py", line 321, in _read_status     raise BadStatusLine(line) http.client.BadStatusLine: '' 

In addition, my entire method seems to be very clunky. I cannot figure out an elegant way to handle exceptions, including a case where no result is returned.

def get_team_names(get_team_id_url, team_id):     print(get_team_id_url + team_id)     try:         response = urllib.request.urlopen(get_team_id_url + team_id)     except Exception as e:         #print(e.code)         #print(e.read())         print('shit')     #print(response.read().decode('utf8'))     r_json = json.loads(response.read().decode('utf8'))     print(r_json['result'])     for i in r_json['result']:         print(i['group']) 

Exception:

Traceback (most recent call last):   File "queue_cleaner_main.py", line 60, in <module>     sys.exit(main())   File "queue_cleaner_main.py", line 57, in main     team_names_to_contact = queue_cleaner_functions.get_team_names(SERVICE_NOW_TEAM_NAME_URL, team[2])   File "D:\oppssup\old_job\queue_cleaner_functions.py", line 141, in get_team_names     r_json = json.loads(response.read().decode('utf8')) UnboundLocalError: local variable 'response' referenced before assignment 

回答1:

This http.client.BadStatusLine is a subclass of http.client.HTTPException. I think if you do:

try:     response = urllib.request.urlopen(get_team_id_url + team_id) except http.client.HTTPException as e:     print(e) 

then you shouldn't have problem catching it. However, what caused it is perhaps what you should concern.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!