为了账号安全,请及时绑定邮箱和手机立即绑定

Python isinstance无法与if语句一起使用。

Python isinstance无法与if语句一起使用。

幕布斯6054654 2021-05-30 20:10:54
我有一个地址清单。一些地址有街道、城市、州、邮政编码,而其他地址只有城市、州和邮政编码。我做了一个for循环,将每个元素放入一个单独的变量中。问题是我没有得到正确的输出,所以我用放了一条if语句isinstance(address[3], int],这样做是为了检查第4个元素是否在那里然后执行代码,但是它不能正常工作。我将在下面发布内容以显示我在做什么,并让我知道我在哪里搞砸了。第一个地址有一条街道,第二个地址没有一条街道,因此我想用“-”代替地址。address = [['123 street name, New Orleans, LA, 12345'],['New Orleans, LA, 12345']]if isinstance(address[3], int):    street = address[0]    city = address[1]    city = city.lstrip()    state = address[2]    state = state.lstrip()    zip_code = address[3]else:    street = "-"    city = address[0]    city = city.lstrip()    state = address[1]    state = state.lstrip()    zip_code = address[2]
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

您的代码有多个问题。.首先address是一个长度为1的列表的列表。其次,如果您要检查地址是否包含邮政编码,则两个示例都可以,但是您不能将它们与其他数据分开访问,因为它现在已作为字符串存储。尝试分离元素,然后将它们实际存储为String或int。下一个问题是您无法检查不存在的元素。如果您知道必须存在其他数据,则可以检查列表的长度。总之,使用这些更改:


addresses = [['123 street name', 'New Orleans', 'LA', 12345],['New Orleans', 'LA', 12345]]


for address in addresses:

    if len(address) > 3:

        street = address[0]

        city = address[1]

        city = city.lstrip()

        state = address[2]

        state = state.lstrip()

        zip_code = address[3]

    else:

        street = "-"

        city = address[0]

        city = city.lstrip()

        state = address[1]

        state = state.lstrip()

        zip_code = address[2]


查看完整回答
反对 回复 2021-06-01
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

你有基本的正确想法。我认为最大的问题是if语句中的条件,因为address[3]只有3个元素时会引发异常。相反,您应该使用len(). 如果列表的长度为3,则仅会得到城市,州和邮政编码,并将其压缩到正确的变量中。如果列表的长度为 4,则您将获得所有 4 个字段。


查看完整回答
反对 回复 2021-06-01
  • 3 回答
  • 0 关注
  • 342 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信