我有以下运行良好的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")
但是上面的内容不起作用,给出了与缩进相关的错误
任何想法有什么不对?
答案 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()