Skip to content

생물정보학 파이썬 변수와함수 테스트 #
Find similar titles

Structured data

Category
Analysis

Chapter 2. 이름(names), 함수(functions)및 모듈(modules) #

Assert #

보통 개발을 함에 있어 개발 과정 중 제약 사항을 설정할 목적으로 사용한다. 즉 어떤 함수를 실행시킬 때 이 함수의 인자가 정확하게 지정되었는지 혹은 실행되는지 확인을 해 볼수 있다. 사용법은 간단하다.

assert expression

와 같이 사용하면 된다. assert 문 뒤에 해당하는 표현식을 적어 주면 된다. 다음의 예에서는 assert 후에 1과 2가 같은 지를 물어 보는 것이다. 이 조건이 맞지 않기 때문에(false) AssertionError가 발생한다. 다시 말해 해당 문장이 True, False에 따라서 에러를 발생시킨다.

>>> assert 1 == 2
Traceback (most recent call last):
File "<pyshell#53>", line 1, in <module> assert 1 == 2
AssertionError

또는 표현식을 두 가지로 쓸 수 있는데 다음과 같이 사용한다. 즉 첫 번째 표현식에서 에러가 발생하면 두 번째에 쓰여진 에러문을 출력한다.

assert expression, expression

다음의 예제에서는 첫 번째 구문에서 에러가 발생했기 때문에 invalid argument 문장을 출력하여 사용자에게 알려준다.

>>> assert 1 == 2, 'invalid arguments'
Traceback (most recent call last):
File "<pyshell#54>", line 1, in <module> assert 1 == 2, "invalid arguments"
AssertionError: invalid argument

위의 예제에서 사용한 GC 비율을 구하는 함수를 고려해 보면 다음과 같이 수정할 수 있다. 이는 계산 도중 에러가 발생하면 잘못된 문자가 포함되었음을 알려준다.

def gc_content(base_seq):
    """Return the percentage of G and C characters in base_seq"""
    assert validate_base_sequence(base_seq), \
    'argument has invalid characters'
    seq = base_seq.upper()
    return ((base_seq.count('G') + base_seq.count('C')) / len(base_seq))

즉 아래 Assert 코드를 추가해 준다. 추가로 RNAflag 인자를 전달 해주어서 해당 서열 중에서 U 혹은 T 문자를 찾을 지 지정해준다. 즉 서열이 DNA 서열인지 RNA 서열인지에 따라서 Tag을 지정해서 붙여주면 해당 서열의 종류에 따라 카운트를 하게 되기 때문에 정확하게 계산이 된다.

def validate_base_sequence(base_sequence, RNAflag):
    """Return True if the string base_sequence contains only upper- or lowercase T (or U, if RNAflag), C, A, and         G characters, otherwise False"""
    seq = base_sequence.upper()
    return len(seq) == (seq.count('U' if RNAflag else 'T') + seq.count('C') + seq.count('A') + seq.count('G'))

그러나 우리는 대부분의 경우 DNA염기서열을 다루기 때문에 별도로 추가해주는 것은 낭비적인 요소이다. 따라서 이에 기본값을 False지정 해주면 대부분의 서열인 DNA는 해결이 될 것이고 RNA서열이 들어갈 경우에만 값을 True로 지정해주면 좀 더 유연한 프로그램을 만들 수 있다.

def validate_base_sequence(base_sequence, RNAflag=False):
    """Return True if the string base_sequence contains only upper- or lowercase T (or U, if RNAflag), C, A, and        G characters, otherwise False"""
    seq = base_sequence.upper()
    return len(seq) == (seq.count('U' if RNAflag else 'T') + seq.count('C') + seq.count('A') + seq.count('G'))

Suggested Pages #

0.0.1_20140628_0