Directorio artículo
Código de notas se puede ejecutar en Jupyter cuaderno (experiencia de realidad Jupyter-lab es grande).
Recomendado para no ver, para ser más manos para golpear código. Ojo más de un millar era mejor a la mano leyó de nuevo.
Júpiter ejecutar código notas relacionadas se han cargado, descargado de sus propios recursos.
Los errores y excepciones
'''
try: # 在try中的异常后的代码不会执行,程序会跳转到except中对异常进行处理
pass # 需要捕获异常的代码块
except ExceptName as result: # 捕获异常ExceptName并将异常重命名为result
pass # 对捕获异常的处理代码块
[
except Exp1 as result1: # except 捕获语句可以有多条,不冲突即可
pass
...
]
Exception :是异常总和,所有异常都可被此异常捕获
当捕获的异常和设定的异常名称不对应时,会进行系统异常处理。
try: # 开启捕获
pass
except Exp: # 捕获到异常时执行
pass
else: # 没有捕获到异常时执行
pass
finally: # 收尾工作,不论是否捕获到异常都会执行
pass
'''
Capturar múltiples excepciones
'''
将异常名放入元组中存储
try:
pass
except (err1, err2 [,err...]):
pass
'''
# 异常 多个异常 例子
try:
1/0
open("sss0")
except NameError:
print("try中出现NameError的异常")
except Exception as result:
print("这里出现一个笼统的异常,{}".format(result))
else:
print("try中没有异常时打印")
finally:
print("不管try中是否有异常,都会执行finally")
print("异常测试结束")
# 例子结束
这里出现一个笼统的异常,division by zero
不管try中是否有异常,都会执行finally
异常测试结束
anidación inusual
'''
内部try未捕获到异常,向外部逐层传递
try:
try:
pass
except Exp1:
pass
pass
except Exp2:
pass
'''
excepción personalizada
'''raise'''
# 用户自定义异常例子
class UserError(Exception):
def __init__(self):
print("这里是用户自定义的异常")
try:
raise UserError
except UserError:
print("抛出自定义异常")
else:
print("没有异常")
# 例子结束
这里是用户自定义的异常
抛出自定义异常
Tratamiento de excepciones a lanzar una excepción
'''
try:
Error
except exception as result:
if (pass):
pass # 开启捕获异常
print(result)
else:
pass # 重写抛出异常,此时的异常不会被捕获,交由系统处理
raise
'''
depuración
impresión
la forma más fácil
Aserción (assert)
En el programa se puede utilizar en la impresión local con afirmaciones (afirman)
assert expression, throwException
expresión de expresión debe ser verdad, de lo contrario, tirar AssertionError: ThrowException
python -O fileName.py
Cerrar afirmaciones
# assert 例子
def judger(name):
# name!='username'为True,继续运行,False抛出your name is error!异常
assert name != 'username','your name is error!'
print('123456')
def main():
judger('username')
if __name__=='__main__':
main()
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-1-4fda0f972b48> in <module>()
9
10 if __name__=='__main__':
---> 11 main()
12
<ipython-input-1-4fda0f972b48> in main()
6
7 def main():
----> 8 judger('username')
9
10 if __name__=='__main__':
<ipython-input-1-4fda0f972b48> in judger(name)
2 def judger(name):
3 # name!='username'为True,继续运行,False抛出your name is error!异常
----> 4 assert name != 'username','your name is error!'
5 print('123456')
6
AssertionError: your name is error!
Inicio sesión
Este artículo resume los módulos de bien común, tiene como referencia. guía de enlace
Dirección: https: //www.cnblogs.com/wf-linux/archive/2018/08/01/9400354.html
tala no produce una excepción, puede salida de información de depuración en un archivo
información de registro de registro también puede especificar el nivel (depuración, información, advertencia, error)
Especifican level = INFO
cuando logging.debug
se produce un error, los demás niveles establecidos empatía.
el registro a través de una sencilla configuración, la salida a una declaración al mismo tiempo en diferentes lugares, tales como: consola y archivo.
import logging
logging.basicConfig(level=[INFO,DEBUG,WARNING,ERROR,CRITICAL],
filename="your_log_file_name",
filemode='r,w,a',
format='your_log_format')
Parámetros explicación:
Nivel de registro: nivel
de nombre de archivo: archivo de registro
fileMode: archivo de registro de modo abierto
formato: Formato de registroParámetros: papel
% (levelno) s: la impresión de valor del nivel de registro
% (levelname) s: el nombre del nivel de registro de impresión
% (ruta) s: ruta de impresión del programa que se está ejecutando, de hecho, el sys.argv [0]
% (nombre del archivo) s: Imprimir ejecución de nombre de programa
% (nombre de función) s: función actual del registro de impresión
% (lineno) d: la impresión del registro del número de línea actual
% (asctime) s: tiempo de impresión de registro
% (thread) d: Imprimir hilo ID
% (threadName) s: impresión nombre hilo
% (proceso) d: Imprimir proceso ID
% (el mensaje) s: información de registro de impresión
# logging 简单例子
import logging
file_name='./Gnerate_files/logging_test.log'
logging.basicConfig(
level=logging.INFO,
filename=file_name,
filemode='w+', # 这里针对本例子使用w,但是日志记录时不建议使用w
format='%(lineno)s\t%(asctime)s: %(name)s: %(levelname)s: %(message)s')
logger = logging.getLogger(name=__name__)
logger.info("Start print log INFO")
logger.debug("Start print log DEBUG")
logger.warning("Start print log WARNING")
logger.info("the print log INFO is end")
print("日志文件内容:")
with open(file_name, 'r', encoding='utf-8', buffering=1024) as file:
lines = file.readlines()
for line in lines:
print(line)
日志文件内容:
14 2020-02-07 13:18:03,459: __main__: INFO: Start print log INFO
16 2020-02-07 13:18:03,460: __main__: WARNING: Start print log WARNING
17 2020-02-07 13:18:03,460: __main__: INFO: the print log INFO is end
'''logger中添加StreamHandler,可以将日志输出到屏幕上'''
# 将日志同时输出到屏幕和日志文件例子
import logging
file_name = './Gnerate_files/logging_test_f_c.log'
loggerc = logging.getLogger(__name__)
loggerc.setLevel(level=logging.INFO)
handler = logging.FileHandler(file_name, mode='w+', encoding='utf-8')
handler.setLevel(logging.INFO)
formatter = logging.Formatter(
'%(asctime)s: %(name)s %(levelname)s %(message)s')
handler.setFormatter(formatter)
console = logging.StreamHandler()
console.setLevel(logging.INFO)
loggerc.addHandler(handler)
loggerc.addHandler(console)
loggerc.info("Start print log INFO")
loggerc.debug("Start print log DEBUG")
loggerc.warning("Start print log WARNING")
loggerc.info("the print log INFO is end")
print("日志文件内容:")
with open(file_name, 'r', encoding='utf-8', buffering=1024) as file:
lines = file.readlines()
for line in lines:
print(line)
Start print log INFO
Start print log WARNING
the print log INFO is end
日志文件内容:
2020-02-07 13:18:10,353: __main__ INFO Start print log INFO
2020-02-07 13:18:10,355: __main__ WARNING Start print log WARNING
2020-02-07 13:18:10,356: __main__ INFO the print log INFO is end
depuración AP
AP depurador tiene una falla obvia es para multi-hilo de depuración remota y otro tipo de apoyo no era lo suficientemente bueno,
Y no hay visualización de la interfaz más intuitiva, no es adecuado para el proyecto pitón grande.
instrucción de operación de AP
comando | logograma | función | comentario |
---|---|---|---|
descanso | si | Establecer un punto de interrupción | no |
Seguir | C | Continuar la ejecución del programa | no |
lista | l | Ver línea de código actual | no |
paso | s | Entrar en la función | no |
regreso | r | Ejecución de código a partir de la corriente hasta que la función devuelve | no |
dejar | q | Terminación y salida | no |
siguiente | norte | La siguiente línea | no |
impresión | pag | Imprimir valores de las variables | no |
ayuda | h | Ayuda | no |
args | un | Ver los parámetros de entrada | no |
entrar | Repetir el último comando | no | |
descanso | si | Mostrar todos los puntos de interrupción | no |
lineno ruptura | b lineno | Establecer un punto de interrupción en la línea especificada | no |
archivo de ruptura: lineno | b archivo: lineno | Establecer un punto de interrupción en la línea del archivo especificado | no |
num clara | Eliminar los puntos de referencia especificados | El número de línea num aquí no es añadir un punto de interrupción, pero el número de puntos de ruptura | |
bt | Ver función de llamada marco de pila | no |
AP depurador interactivo
AP importación
pdb.run (nombreFunc (atributo)) # donde s necesidad de prensa en el AP entonces L puede, o no quiere mostrar el código
AP programa de punto enterrada
AP importación
pdb.set_trace () # Cuando el programa se encuentra con estas palabras al entrar en la puesta en marcha