#python #arguments #position
Вопрос:
Я довольно новичок в Python и пытаюсь создать код, который может вычислять реальное время местоположения на основе долготы.
Это уже сработало, но теперь он хочет, чтобы параметр self
был заполнен. Я определил self
, и теперь ЭТО решено, но теперь, если я попытаюсь использовать offset(City, self=tf)
его, это даст мне эту ошибку:
Traceback (most recent call last):
File "C:UsersMarviPycharmProjectspythonProject1main.py", line 55, in <module>
GMTcor = time_in - offset(City, self=tf) * 60 realTime
File "C:UsersMarviPycharmProjectspythonProject1main.py", line 45, in offset
tz_target = timezone(tf.certain_timezone_at(self,lat=target['lat'], lng=target['lng']))
File "C:UsersMarvianaconda3envspythonProject1libsite-packagestimezonefindertimezonefinder.py", line 744, in certain_timezone_at
timezone = self._get_unique_zone(shortcut_id_x, shortcut_id_y)
TypeError: _get_unique_zone() missing 1 required positional argument: 'shortcut_id_y'
и я понятия не имею, как это исправить… Пожалуйста, помогите мне!
Весь код здесь: (это грязно, я знаю)
from geopy.geocoders import Nominatim
from datetime import timedelta
from pytz import timezone
import pytz
import datetime
from timezonefinder import TimezoneFinder
address = input("Insert place: ")
geolocator = Nominatim(user_agent="Time Correction Calculator")
location = geolocator.geocode(address)
print(location.address)
t = input("Insert time (hh:mm): ")
(h, m) = t.split(':')
time_in = int(h) * 60 int(m)
date_input = input("Insert date (dd.mm.yyyy): ")
utc = pytz.utc
tf = TimezoneFinder
def offset(target, self):
today = datetime.datetime.strptime(date_input, '%d.%m.%Y') # reading of date_in and Splitting it
tz_target = timezone(tf.certain_timezone_at(self,lat=target['lat'],
lng = target['lng'])) # Searching timezone by coordinates
today_target = tz_target.localize(today)
today_utc = utc.localize(today)
return (today_utc - today_target).total_seconds() / 3600 # Calculating the timezone in hours
City = dict({'lat' : location.latitude, 'lng' : location.longitude})
realTime : float = location.longitude * 4 # Longitude to minutes
realTime = round(realTime)
Correction = time_in - offset(City, self=tf) * 60 realTime # Calculating the real time in minutes
print(str(timedelta(hours = GMTcor / 60))[:-3]) # printing the real Time
Ответ №1:
Попробуйте отредактировать строку: 25 при поиске часовых поясов по координатам.
Замените строку: 25
tz_target = timezone(tf.certain_timezone_at(self,lat=target['lat'], lng=target['lng'])) # Searching timezone by coordinates
С:
tz_target = timezone(tf().certain_timezone_at(lat=target['lat'], lng=target['lng'])) # Searching timezone by coordinates
Вам нужно вызвать certain_timezone_at()
, используя объект TimezoneFinder
вместо того, чтобы вызывать его из ссылки на класс.
например, для tf().certain_timezone_at(lat=target['lat'], lng=target['lng'])
Кроме того, нет необходимости передавать self
при вызове метода уровня объекта. Это будет неявно передано интерпретатором python.
Взгляните на эту разницу в коде.
Комментарии:
1. Эй, спасибо за ответ! К сожалению, это не работает. Раньше все было точно так же, но было обновление или что-то еще, и оно сломалось. Если я удалю self, я получу эту ошибку: ошибка типа: certain_timezone_at() отсутствует 1 требуемый позиционный аргумент: ‘self’
2. Эй, я только что отредактировал свой ответ. Была и еще одна проблема. Пожалуйста, взгляните на это. Однако вам необходимо исправить ошибку импорта при использовании
GMTcor
. Это совсем другая проблема.3. Большое вам спасибо! Наконец-то это работает! :DD