The error is due to the variable tag being set. How do we know that this variable is being set?
Let me introduce you to one of the most powerful
debugging tools ever invented which is the assert statement.
The statement assert followed by a condition, evaluates the condition and aborts the execution
raising an exception if condition is false--that is if the condition holds, we proceed as usual.
If the condition does not hold, we throw an exception.
With the statement, we can now go and check the value of tag all through the loop.
So again we say, in our hypothesis tag is being set and we use assert to check that.
With this statement assert not tag should tag ever be set will we immediately get an exception
and again we can check this with foo enclosed in double quotes.
So in order to confirm the hypothesis, we would expect an assert exception.
What is the output really? Let's make this a quiz.
Now that we change the program to include assert not tag, what's going to happen?
Does the program raise an exception or is the case that the output is still foo as before.
The assertion is not violated and tag is not set during the entire loop. Over to you.
Questo errore succede quando la variabile tag viene settata. Come facciamo a sapere se questa variabile viene settata?
Lascia che ti presenti uno dei piu' potenti
strumenti di debugging mai inventati, che e' il comando "assert".
Il comando assert, seguito da una condizione, esamina la condizione e interrompe l'esecuzione
attivando un'eccezione se la condizione sara' falsa, cioe' se la condizione regge si procede normalmente.
Se la condizione non regge, lanciamo un eccezione.
Con questo comando, ora possiamo controllare il valore di tag dentro il loop.
Torniamo a dire, nella nostra ipotesi, tag viene settata e noi usiamo assert per verificarlo.
Col questo comando "assert not tag", se tag dovesse essere settata avremo immediatamente un eccezione
e di nuovo possiamo verificarlo con foo chiuso tra doppi apici.
Quindi per confermare l'ipotesi, ci aspettiamo un'eccezione assert.
Quale sara' veramente l'output? Facciamone un quiz.
Ora che abbiamo cambiato il programma per includere assert not tag, che succedera'?
Il programma attivera' un eccezione o sara' il caso in cui l'ouput sara' ancora foo come prima,
l'asserzione non e' violata e tag non viene settata durante tutto il loop? Tocca a te.
エラーは変数tagの設定により生じています どうすればこの変数の設定が分かるでしょうか
ではデバッグツールの中でも
最も優れたツールであるアサーションを紹介しましょう
条件を伴ったassertはその条件を評価し 条件がFalseの場合に
例外処理を実行します つまり条件が有効な場合は通常通り処理し
有効ではない場合は例外処理を実行するわけです
命令文を使用しループを使って タグの値をチェックします
仮説ではタグの設定があり それをチェックするためにassertを使用します
assert not tagでタグが設定されていれば すぐ例外処理が実行されます
ダブルクォーテーションつきのfooで チェックしましょう
仮説を裏付けるためassertの例外処理を予測します
実際の出力結果は? では小テストです
プログラムにassert not tag を組み込むと 何が起きますか?
例外処理が起きた? 以前と同じようにfooと出力されただけ?
ループではアサーションの違反はありませんし タグも設定されません
这个错误是因为变量tag置位了，我们如何知道它置位了呢？
让我介绍一个最给力的
调试工具，就是断言声明。
断言声明后接条件语句，计算条件成立与否，它会中断执行
抛出例外，只要条件为假--如果条件成立，则照常进行。
如果条件不成立，我们就抛出异常。
用上这声明语句，我们可以检查整个循环中tag的值。
所以我们又说，在我们的假设中，tag被置位，所以我们用断语来检查下。
写上assert not tag，只要tag被置位，我们立即得到一个例外。
我们又来用"foo" 做测试。
所以，为了证明我们的假设，我们估计会有个断言例外。
输出会是什么呢？先做个小测。
现在我们改写了程序，加入assert not tag，会有什么结果呢？
程序会引起一个例外？或本例的输出和之前一样，还是foo？
在整个循环中，断言没有出错，tag没有置位。动手吧！