如何处理类型错误?

问题描述 投票:0回答:1

我刚刚熟悉 Plotly。我尝试根据幅度值为绘图上的每个标记制作不同的大小,这发生了:

 'size': [5*mag for mag in mags],
             ~^~~~
TypeError: unsupported operand type(s) for *: 'int' and 'NoneType'

此外,设置颜色时出现 ValueError:

ValueError: 
    Invalid element(s) received for the 'color' property of scattergeo.marker
        Invalid elements include: [None]

如果我猜对了,Python 不会将 mags 列表中的值识别为数字。完整代码如下:

from plotly.graph_objs import Scattergeo, Layout
from plotly import offline
import json

filename = "past_30.geojson"

with open(filename, encoding='utf-8') as f:
    all_eq_data = json.load(f)

readable_file_1 = 'readable_eq_data.json'
with open(readable_file_1, 'w') as f:
    json.dump(all_eq_data, f, indent=4)

all_eq_dicts = all_eq_data['features']
mags, lons, lats = [], [], []


for eq_dict in all_eq_dicts:
    mag = eq_dict['properties']['mag']
    lon = eq_dict['geometry']['coordinates'][0]
    lat = eq_dict['geometry']['coordinates'][1]

    mags.append(mag)
    lons.append(lon)
    lats.append(lat)


data = [{
    'type': 'scattergeo',
    'lon': lons,
    'lat': lats,
    'marker': {
        'size': [5*mag for mag in mags],
        'color': mags,
        'colorscale': 'Viridis', 
        'reversescale': True,
        'colorbar': {'title': 'Magnitude'},
        },
}]

my_layout = Layout(title='Global Earthquakes')

fig = {'data': data, 'layout': my_layout}
offline.plot(fig, filename='glob_eq.html')

我尝试通过放置

int()
float()
来解决这个问题,但这两种方式最终都导致了另一个 TypeError:

mag = int(mag)
          ^^^^^^^^
TypeError: int() argument must be a string, a bytes-like object or a real number, not 'NoneType'

我检查了 mags 列表本身(

print(mags)
),我相信它包含浮点数:

[2.07, 2.07, 2.2, 3.3, 1.91, 1.89, 1.6, 1.76...]

我在使用函数时遇到了类似的问题,但将

return
放在最后每次都解决了问题。

我错过了什么吗?

plotly typeerror valueerror
1个回答
0
投票

错误消息表明

mags
包含
None
。您可以通过检查语句
None in mags
返回
True
来验证这一点。

您需要以某种方式填充 mags 中的

None
值。根据您的用例,您可以按照注释中的建议选择默认值,或者估算平均值、中位数或其他一些单独值。您还可以从
mags
数组中删除 None 值,但这需要您调整传递到数据字典的其他数组的长度。

© www.soinside.com 2019 - 2024. All rights reserved.