Python3返回TypeError:应为string或byteslike对象

2024-04-26 11:54:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python3和Arrow库开发一个简单的时区查找器。我昨天正在做这件事,它一直运转良好。但是,我今天启动了,我得到了这个错误:TypeError: expected string or bytes-like object。下面是我的代码:

import googlemaps
from timezonefinder import TimezoneFinder
from dateutil import tz 
import arrow as ar

gmaps = googlemaps.Client(key="GOOGLE_API")

lat = 0
lon = 0
tf = TimezoneFinder()

def timeZone(region):
    global lat, lon
    lat = 0
    lon = 0
    try:
        lat = extract_values(gmaps.geocode(region), "latitude" or "lat")[1]
        lon = extract_values(gmaps.geocode(region), "longitude" or "lng")[1]
    except IndexError:
        print("query incorrect. please try again.")
        lat = 0
        lon = 0
    return(tf.timezone_at(lng=lon, lat=lat))

# Extracts all key values from a dictionary obj
def extract_values(obj, key):
    """Pull all values of specified key from nested JSON."""
    arr = []

    def extract(obj, arr, key):
        """Recursively search for values of key in JSON tree."""
        if isinstance(obj, dict):
            for k, v in obj.items():
                if isinstance(v, (dict, list)):
                    extract(v, arr, key)
                elif k == key:
                    arr.append(v)
        elif isinstance(obj, list):
            for item in obj:
                extract(item, arr, key)
        return arr

    results = extract(obj, arr, key)
    return results

utc = ar.utcnow()
location = input("Enter a city for the time zone it's in. ")
region = timeZone(location)
print(region) # returns None
shifted = utc.to(region)
formatted = shifted.format("HH:mm:ss")

print("time in", location, "is:", formatted)

我知道我的location变量是类字符串,我检查了类型。有什么想法吗?我花了很长时间到处寻找解决方案,但什么也找不到。谢谢

编辑:回溯:

Traceback (most recent call last):
  File "timezoneArrow.py", line 51, in <module>
    shifted = utc.to(region)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/arrow/arrow.py", line 718, in to
    tz = parser.TzinfoParser.parse(tz)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/arrow/parser.py", line 548, in parse
    iso_match = cls._TZINFO_RE.match(tzinfo_string)
TypeError: expected string or bytes-like object

Tags: orkeyinfromimportobjforextract