書いてあるコードは合っている(正しく動く)と思います。
エラーのTracebackに出ているコードが書いてあるコードとは別です。(Tracebackに出ているコードはエラーになるであろうコードです)
書いてあるとおりに打たなかったか、別の箇所を引用してしまったか、実行したと思っているコードが別のコードかのどれかでしょう。
正(コードに書いてある方) [(x[0],int(x[1:])) for x in s.split(";")]
誤(エラーに書いてある方) [x[0],int(x[1:]) for x in s.split(";")]
違うコードになってますね。
気になったので確認してみました。
正しい
>>> def parse(s):
return [(x[0], int(x[1:])) for x in s.split(";")]
>>>
returnの打ち間違い
>>> def parse(s):
rerutn [(x[0], int(x[1:])) for x in s.split(";")]
File "<stdin>", line 1
rerutn [(x[0], int(x[1:])) for x in s.split(";")]
^
SyntaxError: invalid syntax
リスト内包表記の間違い
>>> def parse(s):
return [x[0], int(x[1:]) for x in s.split(";")]
File "<stdin>", line 1
return [x[0], int(x[1:]) for x in s.split(";")]
^
SyntaxError: invalid syntax
returnの打ち間違いとリスト内包表記の間違いの両方
>>> def parse(s):
rerutn [x[0], int(x[1:]) for x in s.split(";")]
File "<stdin>", line 1
rerutn [x[0], int(x[1:]) for x in s.split(";")]
^
SyntaxError: invalid syntax
2つ間違いがあって、どちらかだけにしても、全部エラーとエラー箇所のマーカーの位置が同じでした。
returnの打ち間違いをしたときに内包表記の中にエラーがでるのが予想外でした。
なるほど!