You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

切换至Jupyter Notebook运行Python代码出现IndentationError缩进错误

问题根因

触发该IndentationError的核心原因是代码中类方法、逻辑块的缩进层级完全错位,并非单纯的Tab与空格混用问题,同时代码还存在两处语句截断,即便修复缩进也会触发语法错误,具体错误点如下:

  • 第14行def way(self, w):是StreetsHandler类的成员方法,需要和类内__init__方法保持同级缩进(相对class关键字缩进4个空格),当前代码将其顶格写在类外层,Python无法识别其为类的组成部分
  • 第21行row = { "w_id": w.id, "geo": geo }属于道路属性判断分支内的代码,当前缩进层级错误,且位置处于try/except块外,若异常触发return逻辑会出现geo变量未定义的运行时错误
  • 第42行self.num_relations += 1属于relation方法内的计数逻辑,当前顶格写在方法外层,缩进层级不匹配
  • 两处语句截断:第15行判断条件末尾is no应为is not None,第30行判断条件末尾r.tags.get("name"未补全,应为r.tags.get("name") is not None
修正后可运行代码
import osmium
import shapely.wkb as wkblib

class StreetsHandler(osmium.SimpleHandler):
    def __init__(self):
        osmium.SimpleHandler.__init__(self)
        self.num_nodes = 0
        self.num_relations = 0
        self.num_ways = 0
        self.street_relations = []
        self.street_relation_members = []
        self.street_ways = []
        # 全局工厂,用于从OSM几何对象生成WKB格式数据
        self.wkbfab = osmium.geom.WKBFactory()

    def way(self, w):
        if w.tags.get("highway") is not None and w.tags.get("name") is not None:
            try:
                wkb = self.wkbfab.create_linestring(w)
                geo = wkblib.loads(wkb, hex=True)
            except:
                return
            row = { "w_id": w.id, "geo": geo }

            for key, value in w.tags:
                row[key] = value

            self.street_ways.append(row)
            self.num_ways += 1 

    def relation(self, r):
        if r.tags.get("type") == "associatedStreet" and r.tags.get("name") is not None:
            row = { "r_id": r.id }
            for key, value in r.tags:
                row[key] = value
            self.street_relations.append(row)
            
            for member in r.members:
                self.street_relation_members.append({ 
                    "r_id": r.id, 
                    "ref": member.ref, 
                    "role": member.role, 
                    "type": member.type, 
                })
            self.num_relations += 1
修复注意事项
  • 所有类内方法统一相对class关键字缩进4个空格,方法内的条件分支、循环、异常捕获块再相对方法定义缩进4个空格,全程使用空格缩进,不要混用Tab
  • 将错位的row初始化、self.num_relations +=1放回对应逻辑块的正确缩进层级
  • 补全被截断的条件判断语句,调整row初始化位置到try块之后,避免异常触发时出现变量未定义问题
  • 不同方法之间保留空行,避免Jupyter Notebook代码解析时出现token识别错误

内容的提问来源于stack exchange,提问作者Nabih Bawazir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:39:29