r잡초처럼
바른 프로그래밍
r잡초처럼
전체 방문자
오늘
어제
  • 분류 전체보기 (124)
    • FastAPI (7)
    • 끄적끄적 (2)
    • Python (17)
    • Django (31)
    • Database (2)
    • Docker (7)
    • 디자인패턴 (2)
    • CS 공부 (12)
      • 알고리즘 (2)
      • 자료 구조 (1)
      • 네트워크 (7)
      • IT 지식 (1)
      • 운영체제 (1)
    • 기타 팁들 (10)
    • Aws (2)
    • 독서 (1)
    • 코딩테스트 공부 (1)
      • 백준 (0)
      • 프로그래머스 (1)
    • DevOps (13)
    • TIL (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • dotenv
  • 완벽한 IT 인프라 구축을 위한 Docker
  • CS 지식
  • 랜 카드
  • 네트워크
  • pytest
  • 케이블의 종류
  • 6장
  • 7장
  • Batch
  • poetry
  • encoding
  • 상속과 컴포지션
  • 전기 신호
  • 상속 안티 패턴
  • 책 리뷰
  • docker
  • pycharm
  • 컴퓨터 기본 지식
  • 모두의 네트워크
  • fastapi
  • query param
  • preonboarding
  • validate
  • 랜과 왠
  • 5장 회사에서 하는 랜 구성
  • 물리 계층
  • depends
  • 파이썬 클린 코드
  • cp949

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
r잡초처럼

바른 프로그래밍

Python

Python 3.10 변경점 알아보기 - 1. Parenthesized context managers, Better error messages

2023. 1. 28. 20:17

Python 3.10 변경을 알아보려고 한다(3.11도 곧 할 거다.).

 

새로운 기능

Parenthesized context managers

콘텍스트 관리자에서 여러 줄에 걸쳐 계속하기 위해 괄호를 묶는 것이 지원된다. 이를 통해 이전에 Import문에서 가능했던 것과 유사한 방식으로 여러 줄에 긴 컨텍스트 관리자 컬렉션의 형식을 지정할 수 있다. 

with (CtxManager() as example):
    ...

with (
    CtxManager1(),
    CtxManager2()
):
    ...

with (CtxManager1() as example,
      CtxManager2()):
    ...

with (CtxManager1(),
      CtxManager2() as example):
    ...

with (
    CtxManager1() as example1,
    CtxManager2() as example2
):
    ...

Better error messages

SyntaxErrors

닫히지 않은 괄호 또는 대괄호가 포함된 코드를 구문 분석할 때 인터프리터는 구문 오류를 표시하는 대신 닫히지 않은 괄호와 괄호의 위치를 포함합니다. 

Error Code:

expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4,
            38: 4, 39: 4, 45: 5, 46: 5, 47: 5, 48: 5, 49: 5, 54: 6,
some_other_code = foo()

이전 버전의 메시지 출력:

File "example.py", line 3
    some_other_code = foo()
                    ^
SyntaxError: invalid syntax

3.10 버전:

File "example.py", line 1
    expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4,
               ^
SyntaxError: '{' was never closed

이제 인터프리터에 의해 제기된 구문 오류 예외는 문제가 감지된 부분 대신 구문 오류 자체를 구성하는 표현식의 전체 오류 범위를 강조 표시한다. 

이전 버전에서는:

>>> foo(x, z for z in range(10), t, w)
  File "<stdin>", line 1
    foo(x, z for z in range(10), t, w)
           ^
SyntaxError: Generator expression must be parenthesized

3.10 버전에서는

>>> foo(x, z for z in range(10), t, w)
  File "<stdin>", line 1
    foo(x, z for z in range(10), t, w)
           ^^^^^^^^^^^^^^^^^^^^
SyntaxError: Generator expression must be parenthesized

 

더 다양한 케이스는 SyntaxError를  살펴보자

IndentationErrors

구문 위치를 포함하여 들여 쓰기가 예상되는 블록의 종류에 대한 더 많은 콘텍스트를 제공한다.

>>> def foo():
...    if lel:
...    x = 2
  File "<stdin>", line 3
    x = 2
    ^
IndentationError: expected an indented block after 'if' statement in line 2

AttributeErrors

특성 오류를 인쇄할 때, PyErr_Display()는 예외가 발생한 개체에서 유사한 특성 이름의 제안을 제공한다.

>>> collections.namedtoplo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?

NameErrors

인터프리터에서 발생한 NameError를 console에서 보여줄 때, PyErr_Display()는 다음과 같은 함수에서 발생한 유사한 변수 이름의 제안을 제공한다.

>>> schwarzschild_black_hole = None
>>> schwarschild_black_hole
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'schwarschild_black_hole' is not defined. Did you mean: schwarzschild_black_hole?

'Python' 카테고리의 다른 글

Pytest 사용하기 - 1. 간단한 예제  (0) 2023.01.31
파이썬으로 배우는 자료구조 핵심 원리  (0) 2023.01.30
WSL2 환경에서 Poetry 사용하기  (0) 2023.01.16
[Python] GIL이 뭐죠?  (0) 2022.12.21
[Celery] - 시작하기  (0) 2022.12.08
    'Python' 카테고리의 다른 글
    • Pytest 사용하기 - 1. 간단한 예제
    • 파이썬으로 배우는 자료구조 핵심 원리
    • WSL2 환경에서 Poetry 사용하기
    • [Python] GIL이 뭐죠?
    r잡초처럼
    r잡초처럼
    오늘보다 내일 더 나은 개발자가 되기 위한 노력을 기록하는 블로그 입니다.

    티스토리툴바