프로그래밍 298

[Python] 발생한 Exception의 클래스를 확인하는 방법은?

발생 상황 데이터베이스에 연결하여 데이터를 추가(insert)하는 작업에서 Exception이 발생하였습니다. Exception이 발생한 원인은 테이블에 유일키가 있었는데, 중복된 값을 추가하여 "IntegrityError" 오류가 발생한 것이었습니다. 정확하게 IntegrityError만 except 처리를 하면 되겠지만, "except Exception as e:" 구문 하나로 해결할 수 없나 하는 생각에 그럼 발생한 Exception의 클래스를 확인하여 "IntegrityError" 오류만 별도 처리하면 되지 않을까? 하는 생각에 관련 자료를 찾아보게 되었습니다. Exception의 클래스 이름 확인 방법 참고자료를 보면, Exception의 클래스 이름 확인 방법은 간단하게 다음과 같이 할 수 있..

[python-VISA] 잡음지수 분석기의 측정값 읽어오기

개요 잡음지수 분석기(Noise Figure Analyzer)에서 측정 포인트값을 읽어오는 방법에 대해 알아 보겠습니다. 이용한 잡음지수 분석기(Noise Figure Analyzer)는 Agilent N8975A 모델입니다. 측정 포인트값 읽어오기 다음은 측정 포인트 정보들을 읽어오는 예제입니다. from pyvisa import ResourceManager from time import sleep _GPIB = 8 _port = 0 rm = ResourceManager(r'C:\WINDOWS\system32\visa64.dll') client = rm.open_resource(f'GPIB{_port}::{_GPIB}::INSTR') print (client.query('*IDN?')) point_co..

[python] 각종 옵션/설정 정보를 JSON으로 다루기

개요 윈도우 환경에서 작업을 할 적에는 *.ini 형식의 파일로 옵션/설정 정보를 관리하였고, 관련 API 등이 편하게 되어 있어서 이용에 전혀 불편함이 없었는데, 파이썬의 configParse를 이용하려니 만족스럽지가 못하였습니다. 그러던 차에 JSON 형식의 파일이 파이썬의 dict 형과 1:1 대응이 된다는 점에서 착안하여 다음과 같이 옵션/설정 정보를 관리하였더니 INI 형식보다 더 유연하고 사용하기가 좋았습니다. 본 글에서는 파이썬에서 각종 옵션/설정 정보를 JSON으로 다루는 방법을 정리해 보겠습니다. 키 이름 상수 정의하기 자바스크립트에서 JSON 데이터를 다루거나, 파이썬의 dict 형 자료를 이용할 때, 꼭 문제가 되는 것이 키 이름에서 오타가 나서 알 수 없는 곳에서 헤맸던 경험이 종종..

[Python] 파워메터 측정 데이터 가져오기

파워메터 (Power Meter)를 PyVISA를 이용하여 측정 데이터를 가져오는 방법을 알아 보겠습니다. 먼저 예제 코드를 보면 다음과 같습니다. from pyvisa import ResourceManager host, port = '192.168.0.11', 0 conn_str = f'TCPIP{port}::{host}::INSTR' rm = ResourceManager(r'C:\WINDOWS\system32\visa64.dll') # VISA 객체를 생성합니다. print(f'PowerMeter {host}:{port} connecting...') power_meter = rm.open_resource(conn_str) print (power_meter.query('*IDN?')) power_met..

[Python] GPIB 를 통한 계측기 제어 실패기

이더넷을 통한 TCPIP 연결로 계측기 제어는 아무런 문제 없이 잘 수행해 왔었는데, 꼭 GPIB로 계측기를 제어해야할 상황이 발생하였습니다. 연결 문자열만 변경하면 특별한 문제 없이 바로 계측기 제어에 문제가 없을줄 알았지만, 연결부터 되지 않아서 몇 일을 헤맸습니다. GPIB 를 통한 계측기 연결을 위해 헤맸던 그 상황들을 기록해 둡니다. GPIB 연결 오류 발생 확인 파이썬을 설치하면 기본 제공되는 "IDLE Shell"에서 "ResourceManager.list_resources()"로 연결된 계측기를 다음과 같이 확인해 보았습니다. Python 3.10.0 (tags/v3.10.0:b494f59, Oct 4 2021, 19:00:18) [MSC v.1929 64 bit (AMD64)] on wi..

[Python] 의도치 않은 모든 예외 기록 처리하기

문제점 try ... catch 를 아무리 잘 이용하더라도 예측하지 못했던 오류가 발생할 수 있습니다. 특히, PyQt 등을 이용한 GUI라면 예측하지 못한 오류로 인하여 GUI가 사라지거나, Flask 등의 웹 서비스라면 서비스가 중단될 수도 있습니다. 이런 경우, 어떤 문제로 인하여 발생한 것인지 확인할 수 있도록 예측하지 못한 모든 예외를 기록하는 방법을 정리해 둡니다. 일반적인 예외 처리 일반적으로 파이썬에서 예외를 처리하기 위해서는 "try... except" 구문을 이용합니다. 다음 예제는 엑셀 시트의 특정 셀에 값을 채워넣는 과정에서 예외를 처리하는 것을 간단하게 보여 줍니다. for row in gain_data_list[1:]: try: sheet.cell(row = row_base, c..

[Python] Python 3.11에서 PySide2 설치 오류 문제

문제점 새로 설치한 PC에서 파이썬 최신 버전인 3.11을 설치한 이후에 PySide2를 설치하려고 하였더니, 다음과 같은 오류가 발생하였습니다. Collecting PyQt5 (from -r .\requirements.txt (line 3)) Using cached PyQt5-5.15.9-cp37-abi3-win_amd64.whl (6.8 MB) ERROR: Could not find a version that satisfies the requirement PySide2 (from versions: none) ERROR: No matching distribution found for PySide2 (utel-tester) PS D:\Dev\python\mini\utel-tester> pip instal..

[Python] PyQt5 - askyesno, showerror, showinfo 대체하기

문제점 "tkinter.messagebox" 내의 askyesno, showerror, showinfo 함수들을 이용하여 메시창 알림을 잘 사용하고 있었습니다. from tkinter.messagebox import askyesno, showerror, showinfo 그런데 메시지 창이 나타나는 위치가 항상 화면에 중간에만 나타나는 문제가 있었습니다. 알림 메시지 창이 해당 함수를 호출하는 창의 중앙에 위치하도록 변경해야 했습니다. parent 매개변수에 부모 객체를 넘겨주면 부모 컨트롤의 중앙에 표시될 것이라는 글을 보고 적용해 보았으나 오류가 발생하였습니다. 해결 과정 "Tkinter, tkmessagebox keeps sending me to the root":https://stackoverflo..

[Python] 클래스 인스턴스 형변환 시, 주의할 점

파이썬에서 형변환은 꼭 필요하지 않습니다. 오히려 리터럴 형식의 변수에 대한 형변환을 제외하고는 굳이 형변환을 권장하지도 않는 것 같습니다.(지금 생각해 보니, 클래스 인스턴스의 형변환 자체가 필요없기도 하거니, 그런 문법이 없군요. ^^;) 특히나 클래스 인스턴스에 대한 형변환은 무의미할 정도입니다. 다음과 같은 코드를 보면, 어디서 문제가 있는지 감이 오신다면 다행이지만 저와 같이 델파이(파스칼)에 더 익숙한 개발자라면 도대체 문제가 뭔지 알 수가 없을 수 있습니다. (저도 왜 이게 문제가 되는 잘 몰랐습니다. ^^;) def handleGroupboxAllClick(self) -> None: """ 그룹박스 내 모든 체크박스의 선택을 토글하는 "All" 버튼 핸들러 : 모든 체크박스 항목의 선택을 ..

[Python] PySide2에서 'Python 코드 보기' 시, uic 관련 오류

문제점 새로 설치한 PC에서 파이썬을 설치한 이후에 PySide2를 설치하고 새로운 폼을 만든 후, "Python 코드 보기"를 실행하였더니, 다음과 같이 "uic"를 찾을 수 없다는 오류가 발생하였습니다. "코드 생성 실패" 오류 메시지 해결 방법 해결 방법은 간단합니다. "uic.exe" 파일을 검색하여 찾아보면, "PySide2" 패키지가 설치된 폴더에 함께 위치해 있습니다. "uic.exe" 파일이 있는 "PySide2" 패키지가 설치된 폴더로 가서, "bin" 폴더를 생성하고, 생성된 "bin" 폴더에 "uic.exe" 파일을 복사해 줍니다. 그리고 난 후, "Python 코드 보기"를 실행했을 때는 정상적으로 코드가 생성되어 표시됩니다.

728x90