第 7 章:错误与空值
try/except;把 Optional 思维迁到 None 检查。
01try / except / finally
Python
try:
n = int("x")
except ValueError as e:
print("bad", e)
finally:
print("done")
Kotlin
try {
val n = "x".toInt()
} catch (e: NumberFormatException) {
println("bad $e")
} finally {
println("done")
}
ArkTS
try {
const n = Number.parseInt("x");
if (Number.isNaN(n)) {
throw new Error("bad");
}
} catch (e) {
console.info("bad", e);
} finally {
console.info("done");
}
先捕获具体异常(如
ValueError),少写裸 except:。02抛出
Python
def must_positive(n: int) -> int:
if n <= 0:
raise ValueError("n must be > 0")
return n
Kotlin
fun mustPositive(n: Int): Int {
require(n > 0) { "n must be > 0" }
return n
}
ArkTS
function mustPositive(n: number): number {
if (n <= 0) {
throw new Error("n must be > 0");
}
return n;
}
03空值思维对照
Kotlin 的 ? / ArkTS 联合类型,在 Python 里变成显式 None 检查或早期返回。
Python
def len_or_zero(s: str | None) -> int:
if s is None:
return 0
return len(s)
Kotlin
fun lenOrZero(s: String?): Int = s?.length ?: 0
ArkTS
function lenOrZero(s: string | null): number {
return s?.length ?? 0;
}
04for/else、try/else
Python 特色:循环正常结束才走 else(被 break 则不走)。
Python
for x in [1, 2, 3]:
if x == 9:
break
else:
print("not found")
Kotlin
// 无直接对应;用 flag 或 firstOrNull
val found = listOf(1, 2, 3).any { it == 9 }
if (!found) println("not found")
ArkTS
// 同样用标志位
let found = false;
for (const x of [1, 2, 3]) {
if (x === 9) { found = true; break; }
}
if (!found) console.info("not found");