【问题标题】:Python3 returning TypeError: expected string or bytes-like objectPython3 返回 TypeError:预期的字符串或类似字节的对象
【发布时间】:2020-06-06 13:14:39
【问题描述】:

我正在使用 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

【问题讨论】:

  • 在问题中将完整的回溯显示为格式正确的文本。
  • @MichaelButscher 刚刚添加!谢谢:)
  • 问题是 "region" 是 None 而不是字符串。似乎“timezone_at”返回无。
  • 知道是什么原因造成的吗?我已经强制重新安装了我正在使用的所有不同的库,但无法弄清楚为什么这不起作用! @MichaelButscher
  • 在上面的代码中,您从 ar.utcnow() 获取 utc 对象 - 您的意思是 arr.utcnow() 吗?

标签: python python-3.x python-arrow


【解决方案1】:

嗯,我修好了,但我不知道怎么修。我刚刚使用相同的命令从头开始重建了我的代码,并且成功了!希望我能给出更好的解决方案。

【讨论】:

    猜你喜欢
    • 2019-10-31
    • 1970-01-01
    • 2018-10-17
    • 2020-07-08
    • 2018-05-04
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    相关资源
    最近更新 更多