Python中的其他内容在try和except之外

时间:2013-12-09 19:32:29

标签: python if-statement urlopen

我有以下运行良好的python代码:

try:
    with urlopen("http://my.domain.com/get.php?id=" + id) as response:
        print("Has content" if response.read(1) else "Empty - no content")
except:
    print("URL Error has occurred")

但是我试图将try中的if else语句改为这样的东西:这样我就可以运行额外的代码而不只是打印一条消息

try:
    with urlopen("http://my.domain.com/get.php?id=" + id) as response:
        if response.read(1):
            print("Has content")
        else:
            print("Empty - no content")
except:
    print("URL Error has occurred")

但是上面的内容不起作用,给出了与缩进相关的错误

任何想法有什么不对?

4 个答案:

答案 0 :(得分:3)

您可以将异常放入变量并打印出来

except Exception as e:
    print("Error has occurred", e)

如果您缩进看起来像原始问题,那么这可能是您的问题 - 将标签与空格混合

答案 1 :(得分:1)

您应该将不同的区域分开,以便在不同的try块中发生异常。

具体而言,请使用with模块处理这些详细信息,而不是使用try块环绕contextlib。这直接来自PEP 343,例6:

from contextlib import contextmanager

@contextmanager
def opened_w_error(filename, mode="r"):
    try:
        f = open(filename, mode)
    except (IOError, err):
        yield None, err
    else:
        try:
            yield f, None
        finally:
            f.close()   

with opened_w_error('/tmp/file.txt', 'a') as (f, err):
    if err:
        print ("IOError:", err)
    else:
        f.write("guido::0:0::/:/bin/sh\n")   

答案 2 :(得分:0)

你在第一个if中缺少引号。应该是

if response.read(1):
    print("Has content")

答案 3 :(得分:0)

您可以尝试使用else子句来运行代码

来自http://docs.python.org/2/tutorial/errors.html

  

try ... except语句有一个可选的else子句,当时   礼物,必须遵循除了条款以外的所有条款它对代码很有用   如果try子句没有引发异常,则必须执行。对于   例如:

for arg in sys.argv[1:]:
    try:
        f = open(arg, 'r')
    except IOError:
        print 'cannot open', arg
    else:
        print arg, 'has', len(f.readlines()), 'lines'
        f.close()