Cla*_*diu 75 python debugging assert exception-handling environment-variables
如何在Python中禁用断言?
也就是说,如果一个断言失败了,我不希望它抛出AssertionError
,但继续前进.
我怎么做?
Mar*_*off 57
使用-O标志调用Python:
test.py:
assert(False)
print 'Done'
Run Code Online (Sandbox Code Playgroud)
输出:
C:\temp\py>C:\Python26\python.exe test.py
Traceback (most recent call last):
File "test.py", line 1, in <module>
assert(False)
AssertionError
C:\temp\py>C:\Python26\python.exe -O test.py
Done
Run Code Online (Sandbox Code Playgroud)
Aar*_*all 55
如何在Python中禁用断言?
有多种方法会影响单个进程,环境或单行代码.
我演示每一个.
使用-O
标志(大写O)禁用进程中的所有断言语句.
例如:
$ python -Oc "assert False"
$ python -c "assert False"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AssertionError
Run Code Online (Sandbox Code Playgroud)
请注意,通过禁用我的意思是它也不执行它后面的表达式:
$ python -Oc "assert 1/0"
$ python -c "assert 1/0"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
Run Code Online (Sandbox Code Playgroud)
您也可以使用环境变量来设置此标志.
这将影响使用或继承环境的每个进程.
例如,在Windows中,设置然后清除环境变量:
C:\>python -c "assert False"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AssertionError
C:\>SET PYTHONOPTIMIZE=TRUE
C:\>python -c "assert False"
C:\>SET PYTHONOPTIMIZE=
C:\>python -c "assert False"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AssertionError
Run Code Online (Sandbox Code Playgroud)
在Unix中相同(使用set和unset为各自的功能)
你继续提问:
如果断言失败,我不希望它抛出AssertionError,而是继续.
如果您希望代码无法执行,则可以捕获断言错误:
if False:
assert False, "we know this fails, but we don't get here"
Run Code Online (Sandbox Code Playgroud)
打印:
try:
assert False, "this code runs, fails, and the exception is caught"
except AssertionError as e:
print(repr(e))
Run Code Online (Sandbox Code Playgroud)
你将继续从你处理的那一点开始AssertionError
.
像这样的断言语句:
AssertionError('this code runs, fails, and the exception is caught')
Run Code Online (Sandbox Code Playgroud)
相当于
assert expression #, optional_message
Run Code Online (Sandbox Code Playgroud)
和,
内置变量
__debug__
是True
在正常情况下,False
当优化要求(命令行选项-O
).
从使用文档:
打开基本优化.这会将已编译(字节码)文件的文件扩展名从.pyc更改为.pyo.另见PYTHONOPTIMIZE.
和
如果将其设置为非空字符串,则等同于指定
__debug__
选项.如果设置为整数,则相当于-O
多次指定.
归档时间: |
|
查看次数: |
22386 次 |
最近记录: |