什么是保持变量范围的优雅/ Pythonic方法,还能捕获异常?

Mat*_*kas 4 python python-2.7

我已经使用Python几个月了,到目前为止我都喜欢它.我也喜欢通常采用单一的"Pythonic"方法来处理常见的编程问题.

在我编写的代码中,当我调用网络函数并且必须处理异常时,我一直在运行这个我最终编写的类型模板:

proxyTest = None
try:
    proxyTest = isProxyWorking(proxy)
except TimeoutError:
    break

if proxyTest:
    ...
Run Code Online (Sandbox Code Playgroud)

这是我声明proxyTest的方式,以便在我需要使用它时它在范围内,同时还调用将在适当的异常处理结构内返回值的函数.如果我在try块中声明proxyTest,它将超出我的程序的其余部分.

我觉得必须有更优雅的方式来处理这个,但我不确定.有什么建议?

wim*_*wim 6

你有几个更好的选择,在else块中继续你的流量控制:

try:
    proxyTest = isProxyWorking(proxy)
except TimeoutError:
    break
else:
    #proxyTest is guaranteed to be bound here
Run Code Online (Sandbox Code Playgroud)

或者处理except块中的失败案例.

try:
    proxyTest = isProxyWorking(proxy)
except TimeoutError:
    proxyTest = None
#proxyTest is guaranteed to be bound here
Run Code Online (Sandbox Code Playgroud)

我认为,无论哪个更好取决于背景.


Cor*_*man 5

显而易见的替代方案是在except块中执行'false'初始化:

try:
    proxyTest = isProxyWorking(proxy)
except TimeoutError:
    proxyTest = None
Run Code Online (Sandbox Code Playgroud)

这是否比你的构造更容易/更合适取决于逻辑在中间的复杂程度.