Форум сайта python.su
0
vic57
как коллеги сказали - данные нужно отделять от функции.
и у тебя нет обработки ошибок совсем
примерно так
Офлайн
0
vic57
как коллеги сказали - данные нужно отделять от функции.
и у тебя нет обработки ошибок совсем
примерно такimport requests DATA = {} DATA['req']='https://api.vk.com/method/database.getCities.jsonregion_id=1157049&country_id=1&count=200&access_token=' DATA['token'] = 'TOKEN' DATA['version'] = '&v=5.52' def get_multicity(url=None): try: r = requests.get(url,timeout=5) except Exception as e: return {'ERROR':str(e)} else: return r.json() ret = get_multicity(DATA['req'] + DATA['token'] + DATA['version']) print(ret)
Отредактировано irgit (Май 17, 2018 04:31:24)
Офлайн
irgitв сети - лучше везде. хз где в инете что отвалится.
Контроль ошибок нужно делать всегда, где они возможны? Или только там, где они критичны?
Офлайн
0
vic57Спасибо) Посмотрите пожалуйста фрагмент, который основан на вашей конструкции, если все верно, значит я правильно понял?:
в сети - лучше везде. хз где в инете что отвалится.
from urllib.request import urlopen import json URL = {} URL["token"] = "access_token=blabla" URL["vk_getCities"] = "https://api.vk.com/method/database.getCities.json?" URL["count"] = "count=1000" URL["version_vkapi"]="v=5.52" URL["&"] = "&" URL["region_id"] = "region_id=1157049" URL["country_id"] = "country_id=1" def get_city(city=True): try: urlcity =(URL["vk_getCities"]+URL["country_id"]+URL["&"]+URL["region_id"]+URL["&"]+URL["count"]+URL["&"]+URL["token"]+URL["&"]+URL["version_vkapi"]) response = urlopen(urlcity,timeout=1) data = response.read() city = json.loads(data) except Exception as e: return {'ERROR': str(e)} else: return city print (get_city())
Отредактировано irgit (Май 17, 2018 07:25:48)
Офлайн
irgitну это уже лишнее
URL = “&”
urlcity = (URL["vk_getCities"]+URL["country_id"]+URL["&"]+URL["region_id"]+URL["&"]+URL["count"]+URL["&"]+URL["token"]+URL["&"]+URL["version_vkapi"])
>>> l = ['val1','val2','val3'] >>> '&'.join(l) 'val1&val2&val3' >>>
Отредактировано vic57 (Май 17, 2018 08:02:27)
Офлайн
72
Вместо “склеивания”:
urlcity =(URL["vk_getCities"]+URL["country_id"]+URL["&"]+URL["region_id"]+URL["&"]+URL["count"]+URL["&"]+URL["token"]+URL["&"]+URL["version_vkapi"])
urlcity=f'{URL["vk_getCities"]}{URL["country_id"]}{URL["&"]}{URL["region_id"]}&{URL["count"]}&{URL["token"]}&{URL["version_vkapi"]}'
Отредактировано rami (Май 17, 2018 08:15:14)
Офлайн
0
vic57Чётко сказано!
во времена MS-DOS было правило - код функции должен помещаться в экран монитора (25 строк), или ее никто и читать не будет. а любое усложнение повышает вероятность скрытых ошибок.
vic57Круть! Похоже, начинаю понимать, что такое рефакторинг (это модное слово только сегодня узнал)
'&'.join(l)
ramiok, ,буду знать.
лучше форматированная строка:
Офлайн
0
from urllib.request import urlopen import json URL = {} URL["vk_getCities"] = "https://api.vk.com/method/database.getCities.json?" URL["country_id"] = "country_id=1" URL["region_id"] = "region_id=1157049" URL["count"] = "count=1000" URL["token"] = "access_token=blabla" URL["version_vkapi"]="v=5.52" def get_city(city=True): try: urlcity = ("&".join(URL.values())) response = urlopen(urlcity,timeout=1) data = response.read() city = json.loads(data) except Exception as e: return {'ERROR': str(e)} else: return city print (get_city())
Отредактировано irgit (Май 17, 2018 08:47:18)
Офлайн
если один, то опять же не стоит усложнять.
>>> def f(url): try: r = requests.get(url,timeout=3) except Exception as e: return str(e) else: return r.status_code >>> urls = ['ya.ru','mail.ru','google.com','mail.b'] >>> >>> for url in urls: print(f('http://' + url)) 200 200 200 HTTPConnectionPool(host='mail.b', port=80): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10483edd8>: Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known',)) >>>
Отредактировано vic57 (Май 17, 2018 15:42:59)
Офлайн
0
vic57
https://cloud.mail.ru/public/NE3b/F48pCGtqM
неплохая подборка по питону
Офлайн