init
This commit is contained in:
commit
38355d2442
9083 changed files with 1225834 additions and 0 deletions
|
|
@ -0,0 +1,448 @@
|
|||
# Test cases for exceptions (compile and run)
|
||||
|
||||
[case testException]
|
||||
from typing import List
|
||||
def f(x: List[int]) -> None:
|
||||
g(x)
|
||||
|
||||
def g(x: List[int]) -> bool:
|
||||
x[5] = 2
|
||||
return True
|
||||
|
||||
def r1() -> None:
|
||||
q1()
|
||||
|
||||
def q1() -> None:
|
||||
raise Exception("test")
|
||||
|
||||
def r2() -> None:
|
||||
q2()
|
||||
|
||||
def q2() -> None:
|
||||
raise Exception
|
||||
|
||||
class A:
|
||||
def __init__(self) -> None:
|
||||
raise Exception
|
||||
|
||||
def hey() -> None:
|
||||
A()
|
||||
|
||||
[file driver.py]
|
||||
from native import f, r1, r2, hey
|
||||
import traceback
|
||||
try:
|
||||
f([])
|
||||
except IndexError:
|
||||
traceback.print_exc()
|
||||
try:
|
||||
r1()
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
try:
|
||||
r2()
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
try:
|
||||
hey()
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
[out]
|
||||
Traceback (most recent call last):
|
||||
File "driver.py", line 4, in <module>
|
||||
f([])
|
||||
File "native.py", line 3, in f
|
||||
g(x)
|
||||
File "native.py", line 6, in g
|
||||
x[5] = 2
|
||||
IndexError: list assignment index out of range
|
||||
Traceback (most recent call last):
|
||||
File "driver.py", line 8, in <module>
|
||||
r1()
|
||||
File "native.py", line 10, in r1
|
||||
q1()
|
||||
File "native.py", line 13, in q1
|
||||
raise Exception("test")
|
||||
Exception: test
|
||||
Traceback (most recent call last):
|
||||
File "driver.py", line 12, in <module>
|
||||
r2()
|
||||
File "native.py", line 16, in r2
|
||||
q2()
|
||||
File "native.py", line 19, in q2
|
||||
raise Exception
|
||||
Exception
|
||||
Traceback (most recent call last):
|
||||
File "driver.py", line 16, in <module>
|
||||
hey()
|
||||
File "native.py", line 26, in hey
|
||||
A()
|
||||
File "native.py", line 23, in __init__
|
||||
raise Exception
|
||||
Exception
|
||||
|
||||
[case testTryExcept]
|
||||
from typing import Any, Iterator
|
||||
import wrapsys
|
||||
def g(b: bool) -> None:
|
||||
try:
|
||||
if b:
|
||||
x = [0]
|
||||
x[1]
|
||||
else:
|
||||
raise Exception('hi')
|
||||
except:
|
||||
print("caught!")
|
||||
|
||||
def r(x: int) -> None:
|
||||
if x == 0:
|
||||
[0][1]
|
||||
elif x == 1:
|
||||
raise Exception('hi')
|
||||
elif x == 2:
|
||||
{1: 1}[0]
|
||||
elif x == 3:
|
||||
a = object() # type: Any
|
||||
a.lol
|
||||
|
||||
def f(b: bool) -> None:
|
||||
try:
|
||||
r(int(b))
|
||||
except AttributeError:
|
||||
print('no')
|
||||
except:
|
||||
print(str(wrapsys.exc_info()[1]))
|
||||
print(str(wrapsys.exc_info()[1]))
|
||||
|
||||
def h() -> None:
|
||||
while True:
|
||||
try:
|
||||
raise Exception('gonna break')
|
||||
except:
|
||||
print(str(wrapsys.exc_info()[1]))
|
||||
break
|
||||
print(str(wrapsys.exc_info()[1]))
|
||||
|
||||
def i() -> None:
|
||||
try:
|
||||
r(0)
|
||||
except:
|
||||
print(type(wrapsys.exc_info()[1]))
|
||||
raise
|
||||
|
||||
def j(n: int) -> None:
|
||||
try:
|
||||
r(n)
|
||||
except (IndexError, KeyError):
|
||||
print("lookup!")
|
||||
except AttributeError as e:
|
||||
print("attr! --", e)
|
||||
|
||||
def k() -> None:
|
||||
try:
|
||||
r(1)
|
||||
except:
|
||||
r(0)
|
||||
|
||||
def l() -> None:
|
||||
try:
|
||||
r(0)
|
||||
except IndexError:
|
||||
try:
|
||||
r(2)
|
||||
except KeyError as e:
|
||||
print("key! --", e)
|
||||
|
||||
def m(x: object) -> int:
|
||||
try:
|
||||
st = id(x)
|
||||
except Exception:
|
||||
return -1
|
||||
return st + 1
|
||||
|
||||
def iter_exception() -> Iterator[str]:
|
||||
try:
|
||||
r(0)
|
||||
except KeyError as e:
|
||||
yield 'lol'
|
||||
|
||||
[file wrapsys.py]
|
||||
# This is a gross hack around some limitations of the test system/mypyc.
|
||||
from typing import Any
|
||||
import sys
|
||||
def exc_info() -> Any:
|
||||
return sys.exc_info() # type: ignore
|
||||
|
||||
[file driver.py]
|
||||
import sys, traceback
|
||||
from native import g, f, h, i, j, k, l, m, iter_exception
|
||||
from testutil import assertRaises
|
||||
print("== i ==")
|
||||
try:
|
||||
i()
|
||||
except:
|
||||
traceback.print_exc(file=sys.stdout)
|
||||
|
||||
print("== k ==")
|
||||
try:
|
||||
k()
|
||||
except:
|
||||
traceback.print_exc(file=sys.stdout)
|
||||
|
||||
print("== g ==")
|
||||
g(True)
|
||||
g(False)
|
||||
|
||||
print("== f ==")
|
||||
f(True)
|
||||
f(False)
|
||||
|
||||
print("== h ==")
|
||||
h()
|
||||
|
||||
print("== j ==")
|
||||
j(0)
|
||||
j(2)
|
||||
j(3)
|
||||
try:
|
||||
j(1)
|
||||
except:
|
||||
print("out!")
|
||||
|
||||
print("== l ==")
|
||||
l()
|
||||
|
||||
m('lol')
|
||||
|
||||
with assertRaises(IndexError):
|
||||
list(iter_exception())
|
||||
|
||||
[out]
|
||||
== i ==
|
||||
<class 'IndexError'>
|
||||
Traceback (most recent call last):
|
||||
File "driver.py", line 6, in <module>
|
||||
i()
|
||||
File "native.py", line 44, in i
|
||||
r(0)
|
||||
File "native.py", line 15, in r
|
||||
[0][1]
|
||||
IndexError: list index out of range
|
||||
== k ==
|
||||
Traceback (most recent call last):
|
||||
File "native.py", line 59, in k
|
||||
r(1)
|
||||
File "native.py", line 17, in r
|
||||
raise Exception('hi')
|
||||
Exception: hi
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "driver.py", line 12, in <module>
|
||||
k()
|
||||
File "native.py", line 61, in k
|
||||
r(0)
|
||||
File "native.py", line 15, in r
|
||||
[0][1]
|
||||
IndexError: list index out of range
|
||||
== g ==
|
||||
caught!
|
||||
caught!
|
||||
== f ==
|
||||
hi
|
||||
None
|
||||
list index out of range
|
||||
None
|
||||
== h ==
|
||||
gonna break
|
||||
None
|
||||
== j ==
|
||||
lookup!
|
||||
lookup!
|
||||
attr! -- 'object' object has no attribute 'lol'
|
||||
out!
|
||||
== l ==
|
||||
key! -- 0
|
||||
|
||||
[case testTryFinally]
|
||||
from typing import Any
|
||||
import wrapsys
|
||||
|
||||
def a(b1: bool, b2: int) -> None:
|
||||
try:
|
||||
if b1:
|
||||
raise Exception('hi')
|
||||
finally:
|
||||
print('finally:', str(wrapsys.exc_info()[1]))
|
||||
if b2 == 2:
|
||||
return
|
||||
if b2 == 1:
|
||||
raise Exception('again!')
|
||||
|
||||
def b(b1: int, b2: int) -> str:
|
||||
try:
|
||||
if b1 == 1:
|
||||
raise Exception('hi')
|
||||
elif b1 == 2:
|
||||
[0][1]
|
||||
elif b1 == 3:
|
||||
return 'try'
|
||||
except IndexError:
|
||||
print('except')
|
||||
finally:
|
||||
print('finally:', str(wrapsys.exc_info()[1]))
|
||||
if b2 == 2:
|
||||
return 'finally'
|
||||
if b2 == 1:
|
||||
raise Exception('again!')
|
||||
return 'outer'
|
||||
|
||||
def c() -> str:
|
||||
try:
|
||||
try:
|
||||
return 'wee'
|
||||
finally:
|
||||
print("out a")
|
||||
finally:
|
||||
print("out b")
|
||||
|
||||
|
||||
[file wrapsys.py]
|
||||
# This is a gross hack around some limitations of the test system/mypyc.
|
||||
from typing import Any
|
||||
import sys
|
||||
def exc_info() -> Any:
|
||||
return sys.exc_info() # type: ignore
|
||||
|
||||
[file driver.py]
|
||||
import traceback
|
||||
import sys
|
||||
from native import a, b, c
|
||||
|
||||
def run(f):
|
||||
try:
|
||||
x = f()
|
||||
if x:
|
||||
print("returned:", x)
|
||||
except Exception as e:
|
||||
print("caught:", type(e).__name__ + ": " + str(e))
|
||||
|
||||
print("== a ==")
|
||||
for i in range(3):
|
||||
for b1 in [False, True]:
|
||||
run(lambda: a(b1, i))
|
||||
|
||||
print("== b ==")
|
||||
for i in range(4):
|
||||
for j in range(3):
|
||||
run(lambda: b(i, j))
|
||||
|
||||
print("== b ==")
|
||||
print(c())
|
||||
|
||||
[out]
|
||||
== a ==
|
||||
finally: None
|
||||
finally: hi
|
||||
caught: Exception: hi
|
||||
finally: None
|
||||
caught: Exception: again!
|
||||
finally: hi
|
||||
caught: Exception: again!
|
||||
finally: None
|
||||
finally: hi
|
||||
== b ==
|
||||
finally: None
|
||||
returned: outer
|
||||
finally: None
|
||||
caught: Exception: again!
|
||||
finally: None
|
||||
returned: finally
|
||||
finally: hi
|
||||
caught: Exception: hi
|
||||
finally: hi
|
||||
caught: Exception: again!
|
||||
finally: hi
|
||||
returned: finally
|
||||
except
|
||||
finally: None
|
||||
returned: outer
|
||||
except
|
||||
finally: None
|
||||
caught: Exception: again!
|
||||
except
|
||||
finally: None
|
||||
returned: finally
|
||||
finally: None
|
||||
returned: try
|
||||
finally: None
|
||||
caught: Exception: again!
|
||||
finally: None
|
||||
returned: finally
|
||||
== b ==
|
||||
out a
|
||||
out b
|
||||
wee
|
||||
|
||||
[case testCustomException]
|
||||
from typing import List
|
||||
|
||||
class ListOutOfBounds(IndexError):
|
||||
pass
|
||||
|
||||
class UserListWarning(UserWarning):
|
||||
pass
|
||||
|
||||
def f(l: List[int], k: int) -> int:
|
||||
try:
|
||||
return l[k]
|
||||
except IndexError:
|
||||
raise ListOutOfBounds("Ruh-roh from f!")
|
||||
|
||||
def g(l: List[int], k: int) -> int:
|
||||
try:
|
||||
return f([1,2,3], 3)
|
||||
except ListOutOfBounds:
|
||||
raise ListOutOfBounds("Ruh-roh from g!")
|
||||
|
||||
def k(l: List[int], k: int) -> int:
|
||||
try:
|
||||
return g([1,2,3], 3)
|
||||
except IndexError:
|
||||
raise UserListWarning("Ruh-roh from k!")
|
||||
|
||||
def h() -> int:
|
||||
try:
|
||||
return k([1,2,3], 3)
|
||||
except UserWarning:
|
||||
return -1
|
||||
|
||||
[file driver.py]
|
||||
from native import h
|
||||
assert h() == -1
|
||||
|
||||
[case testExceptionAtModuleTopLevel]
|
||||
from typing import Any
|
||||
|
||||
def f(x: int) -> None: pass
|
||||
|
||||
y: Any = ''
|
||||
f(y)
|
||||
|
||||
[file driver.py]
|
||||
import traceback
|
||||
try:
|
||||
import native
|
||||
except TypeError:
|
||||
traceback.print_exc()
|
||||
else:
|
||||
assert False
|
||||
|
||||
[out]
|
||||
Traceback (most recent call last):
|
||||
File "driver.py", line 3, in <module>
|
||||
import native
|
||||
File "native.py", line 6, in <module>
|
||||
f(y)
|
||||
TypeError: int object expected; got str
|
||||
Loading…
Add table
Add a link
Reference in a new issue