2013-12-09 2 views
-5

나는 잘 작동 다음 파이썬 코드가 있습니다파이썬 경우 시도 내 및 제외한 다른

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: 
    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

try-except 블록을 제거하고 try : 문 뒤에 코드를 실행하십시오. 그러면 틀린 것이 보일 것입니다. – leeladam

+2

"내용 있음" – njzk2

+2

주위에 따옴표가 누락 된 경우 '작동하지 않음'을 정의하십시오. – njzk2

답변

1

당신은 당신이 원래의 질문과 같은 들여 쓰기를하면 너무

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

이, 당신의 문제가 될 수있는 변수 및 인쇄에 예외를 넣을 수 있습니다 - 혼합 탭 공백 포함

+0

당신은 거기에 내가 생각했던 탭에 몇 가지 공백이 있었고 그래서 모든 것을 꺼내서 다시 들여 쓰기하고 그 문제를 해결했습니다. – John

0

첫 번째 경우에는 따옴표가 없습니다.

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

당신이하려고 문을 제외하고 ... http://docs.python.org/2/tutorial/errors.html

에서 코드

을 실행하기 위해 다른 절을 시도 할 수 있습니다해야하는 옵션 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() 
0

다른 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") 
관련 문제