2016-10-07 6 views
0

파이썬을 배우려고하는데 변수를 Exception에 전달할 수 있는지 알고 싶습니다. , staffId : "직원 아이디에 대한 데이터를 변환하는 문제가 발생했습니다"변수를 예외로 전달 하시겠습니까?

인쇄 (: 내가 뭔가를 인쇄 할 수 있도록 예외 staffId를 전달하려는

try: 
    staffId = int(row['staffId']) 
    openingSalary = int(row['initialSalary']) 
    monthsWorked = float(row['monthsWorked']) 
except CutomException: 
    pass 

class CustomException(ValueError): # raised if data conversion fails 
    def __init__(self): 
     print("There was a problem converting data") 

: 이것은 내가 가지고있는 코드입니다 How to pass a variable to an exception when raised and retrieve it when excepted?

+0

당신이 찾고있는 무엇을 할 것인가 링크 된 질문에 대한 답변 (예를 들어, 전화'당신'try' 블록의 내부 CustomException' 인상) –

+0

그것은 CustomException를 제기하지 않을까요 try 블록에서? – komodo

+0

나는 그것을 더 설명하기 위해 아래에 대답을 제공했다. 간단히 말해서 매번 예외를 발생시키지 않으려면'CustomException'을'raise '시켜야합니다. –

답변

1

예외의 발신자, 예 :)

나는 어떤 성공이 시도 raise 예외는 생성자에 인수를 전달해야합니다.

class CustomException(ValueError): # raised if data conversion fails 
    def __init__(self, message): 
     self.message = message; 
     print("There was a problem converting data") 


try: 
    try: 
     staffId = int(row['staffId']) 
     openingSalary = int(row['initialSalary']) 
     monthsWorked = float(row['monthsWorked']) 
    except ValueError as e: 
     raise CutomException(e); 
except CutomException: 
    pass 
+0

try ... except 문에서 어떻게 수행합니까? 필자의 예에서 제공된 정보가 정확하지 않은 경우 staffId에 문자열을 전달하면 예외가 자동으로 발생한다고 가정 해 봅시다. 적어도 그것은 그것을 이해하는 방법입니다. – komodo

+1

@komodo 중첩 된 예외로 처리 할 수 ​​있습니다. 그냥 –

1

맞춤 예외 조건부 try 블록으로 staffId 변수를 포함하는 D 'raise 될 필요가있을 것이다. 예를 들어 staffIdstr이고 int이 아닐 경우 오류가없는 경우에도의

try: 
    # conditionalize a scenario where you'd want to raise an error 
    # (e.g. the variable is a string) 
    if type(staffId) is str: 
     raise CustomException(staffId) 
    else: 
     staffId = int(row['staffId']) 
     openingSalary = int(row['initialSalary']) 
     monthsWorked = float(row['monthsWorked']) 
except CutomException: 
    pass 

class CustomException(ValueError): # raised if data conversion fails 
    def __init__(self, id): 
     print("There was a problem converting data %s" % id) 
+0

을 전달하십시오. 문제는 사전에 추출 된 CSV 파일에서 가져온 행의 모든 ​​정보가 문자열이라는 점입니다. 따라서 staffId가 이미 알고 있기 때문에 staffId가 문자열인지 확인할 수 없습니다. 그래도 좋은 생각이야;) – komodo

+0

@komodo 나는 당신의 코멘트에서 다른 대답으로 조건으로 그것을 사용하고 있었다. 어쨌든, 나는 다른 대답에 당신이 필요로하는 것이 있다고 생각한다. –

관련 문제