以艰难的方式学习Python - 练习36 - 如果还有死函数

时间:2016-04-05 16:32:29

标签: python python-2.7

If-Statements here的第二条规则,令我困惑的是:

  

如果 else 永远不会运行,因为它没有意义,那么你必须在打印的 else 中使用 die 函数输出错误信息并死掉,就像我们在上一次练习中所做的那样。这会发现很多错误。

以下是上一次练习的代码:

def dead(why):
    print why, "Good job!"
    exit(0)

def start():
    print "You are in a dark room."
    print "There is a door to your right and left."
    print "Which one do you take?"

    choice = raw_input("> ")

    if choice == ‘left’:
        bear_room()
    else:
        dead(‘You stumble around the room until you starve.’)

基本上是说如果不满足条件,你必须成功终止程序吗?

4 个答案:

答案 0 :(得分:2)

是的,这个想法是:

import sys

def die(msg):
  print msg
  sys.exit(1)

if condition:
  # do stuff
else:
  die('This cannot happen!')

您也可以使用assert代替,或引发异常,或任何其他灾难性失败的内容。这有助于您在运行时验证您没有执行的条款,实际上并没有运行。

恕我直言,你不应该对这个die的完成方式感到太过兴奋。引用文本试图做的重点是,当你确定某些条件为真时,你也可以强行断言,以便捕获运行时错误。

答案 1 :(得分:1)

该指南试图向您显示,当您在<html> <head> <script type="text/javascript"> function displayResult() { document.getElementById("tabsalaire").insertRow(-1).innerHTML = '<td><input name="salaireparstatut4" id="salaireparstatut4" /></td>'; document.getElementById("tabtitulaire").insertRow(-1).innerHTML = '<td><input name="nbtitulaire4" id="nbtitulaire4" /></td>'; document.getElementById("tabfemale").insertRow(-1).innerHTML = '<td><input name="nbfemale4" id="nbfemale4" /></td>'; document.getElementById("tabsommeparstatut").insertRow(-1).innerHTML = '<td><input name="sommeparstatut4" id="sommeparstatut4" /></td>'; document.getElementById("selectstatus").insertRow(-1).innerHTML = '<td><select name="statutselect4" required> < option value = "" > choisir < /option> < option value = "Professeur" > Professeur < /option> < option value = "Assistant" > Assistant < /option> < /select> < input type = "hidden" name = "EnseignementSuperieur" value = "EnseignementSuperieur" / > < /td>'; } </script> </head> <body> <form method="post" action="processform.php"> <table border="1"> <tr> <th>Add</th> <th>Salaire annuel</th> <th>nombre titulaire</th> <th>Nombre femme</th> <th>Somme</th> <th>Statut</th> <th>Type</th> </tr> <td> <table> <tr> <td> <button type="button" onClick="displayResult()">Insert new row</button> </td> </tr> </table> </td> <td> <table id="tabsalaire"> <tr> <td> <input name="salaireparstatut1" id="salaireparstatut1" /> </td> </tr> <tr> <td> <input name="salaireparstatut2" id="salaireparstatut2" /> </td> </tr> <tr> <td> <input name="salaireparstatut3" id="salaireparstatut3" /> </td> </tr> </table> </td> <td> <table id="tabtitulaire"> <tr> <td> <input name="nbtitulaire1" id="nbtitulaire1" /> </td> </tr> <tr> <td> <input name="nbtitulaire2" id="nbtitulaire2" /> </td> </tr> <tr> <td> <input name="nbtitulaire3" id="nbtitulaire3" /> </td> </tr> </table> </td> <td> <table id="tabfemale"> <tr> <td> <input name="nbfemale1" id="nbfemale1" /> </td> </tr> <tr> <td> <input name="nbfemale2" id="nbfemale2" /> </td> </tr> <tr> <td> <input name="nbfemale3" id="nbfemale3" /> </td> </tr> </table> </td> <td> <table id="tabsommeparstatut"> <tr> <td> <input name="sommeparstatut1" id="sommeparstatut1" /> </td> </tr> <tr> <td> <input name="sommeparstatut2" id="sommeparstatut2" /> </td> </tr> <tr> <td> <input name="sommeparstatut3" id="sommeparstatut3" /> </td> </tr> </table> </td> <td> <table id="selectstatus"> <tr> <td> <select name="statutselect1" required> <option value="">choisir</option> <option value="Professeur">Professeur</option> <option value="Assistant">Assistant</option> </select> <input type="hidden" name="designationtypecadre1" value="EnseignementSuperieur" /> </td> </tr> <tr> <td> <select name="statutselect2"> <option value="">choisir</option> <option value="Professeur">Professeur</option> <option value="Assistant">Assistant</option> </select> <input type="hidden" name="designationtypecadre2" value="EnseignementSuperieur" /> </td> </tr> <tr> <td> <select name="statutselect3"> <option value="">choisir</option> <option value="Professeur">Professeur</option> <option value="ProfesseurConf">ProfesseurConf</option> <option value="Assistant">Assistant</option> </select> <input type="hidden" name="designationtypecadre3" value="EnseignementSuperieur" /> </td> </tr> <tr></tr> </table> </td> <th> EnseignementSuperieur </th> </tr> <td>&nbsp;</td> <td> <input name="SubSommenbTitulaireTypeCadre" id="SubSommenbTitulaireProfChercheur" /> </td> <td> <input name="SubSommenbFemaleTypeCadre" id="SubSommenbFemaleProfChercheur" /> </td> <td> <input name="SubSommeNbProfTypeCadre" id="SubSommeNbProfChercheur" /> </td> <td> <input name="SubSommeSalaireAnnuelTypeCadre" id="SubSommeSalaireAnnuelProfChercheur" /> </td> <th>Somme SUB</th> <tr> </tr> <tr> <td> <input type="submit" name="Validate" value="Validate" /> </td> </tr> </table> </body> </html> 声明中检查时,您可以看到用户提供的// Header request Dictionary<string, string> headers = new Dictionary<string, string>(); // My server code need this headers.Add ("Accept", "application/json"); WWW w = new WWW (MY_URL, null, headers); yield return w; 。如果您的其他人看起来像:

choice

您将能够看到您没有预料到的用户输入内容。

答案 2 :(得分:1)

问题是语法只允许&#34; Left&#34;,当提示允许输入任何内容时。换句话说,如果我进入&#34; Bob&#34;,我会饿死。我应该抓住任何不合适的东西,并在那时“死亡”(或帮助用户做出适当的决定)。

这是一种教导错误处理和死亡的尝试。你会重写它,以便你准确进入或死亡(没有退出)。如果你不选择左边,即使提示声明有两种选择,也没有别的选择。

答案 3 :(得分:0)

如果您真的希望只添加'left',那么检查未经检查的输入的更好方法是

  if choice != ‘left’:
     dead(‘You stumble around the room until you starve.’)
  bear_room()

通过这种方式,您仍然可以验证输入是否符合预期,但它可以为主逻辑保存缩进和空间。