可以将所有裸露的“除外”都转化为更好的东西吗?

时间:2019-07-08 12:56:07

标签: python

我正在努力处理以下代码。我的目标是检查是否可以执行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',但是我找不到一个好的选择。我也想知道这是否是另一种选择?

3 个答案:

答案 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

这样,您就可以知道错误的类型以及错误的性质,并且可以适当地处理错误,而不是捕获每个错误并假定捕获的错误属于某种类型,或者在运行时检查该类型。