Форум сайта python.su
vic57
как коллеги сказали - данные нужно отделять от функции.
и у тебя нет обработки ошибок совсем
примерно так
Офлайн
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в сети - лучше везде. хз где в инете что отвалится.
Контроль ошибок нужно делать всегда, где они возможны? Или только там, где они критичны?
Офлайн
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)
Офлайн
Вместо “склеивания”:
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)
Офлайн
vic57Чётко сказано!
во времена MS-DOS было правило - код функции должен помещаться в экран монитора (25 строк), или ее никто и читать не будет. а любое усложнение повышает вероятность скрытых ошибок.
vic57Круть! Похоже, начинаю понимать, что такое рефакторинг (это модное слово только сегодня узнал)
'&'.join(l)
ramiok, ,буду знать.
лучше форматированная строка:
Офлайн
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)
Офлайн
vic57
https://cloud.mail.ru/public/NE3b/F48pCGtqM
неплохая подборка по питону
Офлайн