Как исправить: ошибка типа: _get_unique_zone() отсутствует 1 необходимый позиционный аргумент: ‘shortcut_id_y’?

#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