我正在努力处理以下代码。我的目标是检查是否可以执行http://application1.testdomain.com should redirect to http://Hostserver:8080
http://application2.testdomain.com should redirect to http://Hostserver:8181
http://application3.testdomain.com should redirect to http://Hostserver:8282
这是一个字符串,以确定不同的返回值。
arg
Pycharm告诉我不要使用 bare'except',但是我找不到一个好的选择。我也想知道这是否是另一种选择?
答案 0 :(得分:3)
如果仅使用except
,则将捕获从BaseException继承的所有内容,包括KeyboardInterrupt之类的东西。这可能不是您想要的。很有可能您最终会掩盖您真正想知道的错误条件。
This page讨论了捕获所有异常的潜在用途-记录异常(例如,在程序或模块的顶级)并立即重新引发它。重新筹集资金很重要,因为这意味着您不会在不应该的时候隐藏错误。
答案 1 :(得分:2)
“我的目标是检查是否可以执行作为字符串的arg”
如果您只想使用compile
来检查它是否可以执行,如果不能执行,则会抛出SyntaxError
。
try:
compile(arg)
except SyntaxError:
return False
return True
否则,使用Exception
作为更默认的例外。
try:
return eval(arg)
except Exception:
return arg
您可以except
使用不同的异常,并根据异常来决定返回什么。
答案 2 :(得分:1)
可能是希望您捕获并处理特定类型的异常。
类似的东西:
def process(arg):
try:
with open (arg) as myFile:
return myFile.read()
except IOError as e:
# The file could not be read, some other IO related error
print ("the file could not be read")
raise e
这样,您就可以知道错误的类型以及错误的性质,并且可以适当地处理错误,而不是捕获每个错误并假定捕获的错误属于某种类型,或者在运行时检查该类型。