在Python中,一个try
/ except
如何实例化一个类?
例如,我现在正在处理GitHub脚本:
from github3 import login
user = login(username, password)
起初,我认为它会像以下一样简单:
try:
user = login(username, password)
except Exception, e:
print e
但是如果我强制例外(例如提供错误的参数),那么我就不会看到任何例外:
$ python my-script.py -u 1 -p 1; echo $?
name 'pw' is not defined
0
如果我再试一次,但将try
/ except
从混合中取出,我会得到我希望看到的例外情况:
$ python my-script.py -u username -p password; echo $?
Traceback (most recent call last):
File "delete-all-gists.py", line 19, in <module>
user = login(u, pw)
NameError: name 'pw' is not defined
1
我无法成为唯一一个提出这个问题的人,但我担心我的SO-search-fu可能会让我失望......
更新
事实上,正如评论中所提到的那样,在问这个问题时我似乎已经闭上眼睛了......
我认为让我失误的是,如果提供了错误的用户名/密码,github3
login()
方法并没有抛出任何异常。例如:
from github3 import login
u = 'foo'
p = 'bar'
try:
user = login(u, p)
except Exception, e:
print e
返回:
无。没有错误,例外或任何事情。
但是,以下确实会引发异常,如预期的那样:
from github3 import login
u = 'foo'
p = 'bar'
try:
user = login(username, p)
except Exception, e:
print e
返回:
name 'username' is not defined
当然,这是因为我特意提供了一个不存在的变量作为login()
方法的用户名参数来强制引发异常。
答案 0 :(得分:3)
请记住,每次运行try/except
块时都应该这样,因为您可以合理地处理发生的异常。例如:
username, password = input("Username: "), input("Password: ")
while True:
try:
login(username, password)
except BadPasswordException as e:
print("Invalid login")
else:
# you only get here if there are no exceptions
break
如果您无法合理地处理异常,最好记录它并让程序正常退出。
try:
foo(some,arguments)
except CthuluHasBeenReleasedException as e:
logging.fatal("Oh (old) god!")
sys.exit(1)