티스토리 뷰
[이왜안?] DiffAb 코드구현 에러발생 ValueError: invalid literal for int() with base 10: 'X'
벼랑끝과학자 2025. 8. 5. 18:52https://github.com/luost26/diffab/issues/21#issuecomment-2350808489
在运行sabdab.py代码,发生报错 · Issue #21 · luost26/diffab
在运行sabdab.py代码,发生报错,请问该如何解决呀 第一个错误:报ValueError: invalid literal for int() with base 10: 'V'异常, 第二个错误如图,请教这两个问题都是怎么合理解决的呀
github.com
DiffAb 학습을 위해서 train 코드를 돌려보았는데 전처리과정에서 다음과 같은 에러가 나온다.
File "train.py", line 55, in <module>
train_dataset = get_dataset(config.dataset.train)
File "/data/project/diffab/diffab/datasets/_base.py", line 35, in get_dataset
return _DATASET_DICT[cfg.type](cfg, transform=transform)
File "/data/project/diffab/diffab/datasets/sabdab.py", line 582, in get_sabdab_dataset
return SAbDabDataset(
File "/data/project/diffab/diffab/datasets/sabdab.py", line 270, in __init__
self._load_structures(reset)
File "/data/project/diffab/diffab/datasets/sabdab.py", line 347, in _load_structures
self._preprocess_structures()
File "/data/project/diffab/diffab/datasets/sabdab.py", line 393, in _preprocess_structures
data_list = joblib.Parallel(n_jobs = 1, #n_jobs = max(joblib.cpu_count() // 2, 1),
File "/home/.local/lib/python3.8/site-packages/joblib/parallel.py", line 1918, in __call__
return output if self.return_generator else list(output)
File "/home/.local/lib/python3.8/site-packages/joblib/parallel.py", line 1847, in _get_sequential_output
res = func(*args, **kwargs)
File "/data/project/diffab/diffab/datasets/sabdab.py", line 176, in preprocess_sabdab_structure
model = parser.get_structure(id, pdb_path)[0]
File "/home/.conda/envs/diffab_hr/lib/python3.8/site-packages/Bio/PDB/PDBParser.py", line 100, in get_structure
self._parse(lines)
File "/home/.conda/envs/diffab_hr/lib/python3.8/site-packages/Bio/PDB/PDBParser.py", line 123, in _parse
self.trailer = self._parse_coordinates(coords_trailer)
File "/home/.conda/envs/diffab_hr/lib/python3.8/site-packages/Bio/PDB/PDBParser.py", line 199, in _parse_coordinates
resseq = int(line[22:26].split()[0]) # sequence identifier
ValueError: invalid literal for int() with base 10: 'X'
[원인]
원인은 PDB의 parser 기능과 잘못된 PDB파일에 있다.

PDB를 Parsing해서 structure data를 불러오는 PDB.PDBParser의 get_structure함수에는 다음과 같은 코드가 들어있다.
resseq = int(line[22:26].split()[0]) # sequence identifier
이 코드는 PDB파일의 22번째~26번째 컬럼의 값을 가져와서 split하고, 그 첫번째 값을 resseq이라는 변수에 저장하라는 코드이다.눈치가 빠른 사람들은 바로 느낌이 올텐데, 올려둔 PDB 예시를보면 ATOM 뒤에 99999가 넘어가면서 100000으로 컬럼이 한칸 밀려버린다.
따라서 원래같으면 71이 저장되어야 할 코드에 'X'와 '7' 이 들어가게 된다.
resseq은 변수명에서도 직관적으로 알 수 있지만, X 같은 string이 아니라 int형의 값이어야한다. (당연하다, 변수에 저장되는 우항 자체가 int()로 감싸져있는데 string을 input하면 에러가 날 수 밖에 없다)
[해결방법]
PDB파일의 ATOM 뒤 index값이 99999가 넘어가는 데이터는 Drop해서 버리도록 하자. 비정상적으로 긴 데이터로 크게 누락되는 데이터가 많지 않을 것이다.
만약 그게 싫다면 .conda/envs/$ENV_NAME/lib/python3.8/site-packages/Bio/PDB/PDBParser.py을 직접 수정해서 예외처리가 가능하도록 해야하는데 나는 그런 끔찍한 디버깅까지 하고싶지는 않다.
'Computer > 이게 왜 안되지?' 카테고리의 다른 글
- Total
- Today
- Yesterday
- Manimlibrary
- 이왜안
- 베이즈정리
- eigenvalue
- manimtutorial
- 기계학습
- 최대우도추정
- eigenvector
- MorganCircularfingerprint
- antigen antibody interaction prediction
- MLE
- dataloader
- 3B1B따라잡기
- 파이썬
- elementry matrix
- 선형대수
- nanobody
- 나노바디
- 논문리뷰
- 오일석기계학습
- manim library
- Matrix algebra
- ai신약개발
- 3b1b
- 인공지능
- MatrixAlgebra
- 항원항체결합예측모델
- 백준
- marginal likelihood
- manim
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |