【发布时间】: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