lua如何打印行號_LUA教程錯誤信息和回跟蹤(Tracebacks)-34

雖然你可以使用任何類型的值作為錯誤信息,通常情況下,我們使用字符串來描述遇到的錯誤。如果遇到內部錯誤(比如對一個非table的值使用索引下標訪問)Lua將自己產生錯誤信息,否則Lua使用傳遞給error函數的參數作為錯誤信息。不管在什么情況下,Lua都盡可能清楚的描述問題發生的緣由。

local status, err = pcall(function () a = 'a'+1 end)

print(err)

--> stdin:1: attempt to perform arithmetic on a string value

local status, err = pcall(function () error("my error") end)

print(err)

--> stdin:1: my error

例子中錯誤信息給出了文件名(stdin)與行號。

函數error還可以有第二個參數,表示錯誤發生的層級。比如,你寫了一個函數用來檢查“error是否被正確調用”:

function foo (str)

if type(str) ~= "string" then

error("string expected")

end

...

end

可有人這樣調用此函數:

foo({x=1})

Lua會指出發生錯誤的是foo而不是error,實際上,錯誤是調用error時產生的。為了糾正這個問題,修改前面的代碼讓error報告錯誤發生在第二級(你自己的函數是第一級)如下:

function foo (str)

if type(str) ~= "string" then

error("string expected", 2)

end

...

end

當錯誤發生的時候,我們常常希望了解詳細的信息,而不僅是錯誤發生的位置。若能了解到“錯誤發生時的棧信息”就好了,但pcall返回錯誤信息時,已經釋放了保存錯誤發生情況的棧信息。因此,若想得到tracebacks,我們必須在pcall返回以前獲取。Lua提供了xpcall來實現這個功能,xpcall接受兩個參數:調用函數、錯誤處理函數。當錯誤發生時,Lua會在棧釋放以前調用錯誤處理函數,因此可以使用debug庫收集錯誤相關信息。有兩個常用的debug處理函數:debug.debug和debug.traceback,前者給出Lua的提示符,你可以自己動手察看錯誤發生時的情況;后者通過traceback創建更多的錯誤信息,也是控制臺解釋器用來構建錯誤信息的函數。你可以在任何時候調用debug.traceback獲取當前運行的traceback信息:

print(debug.traceback())

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529245.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529245.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529245.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 套接字 struck_Python socket粘包問題(最終解決辦法)

套接字:就是將傳輸層以下的協議封裝成子接口對于應用程序來說只需調用套接字的接口,寫出的程序自然是遵循tcp或udp協議的實現第一個功能個:實現:通過客戶端向服務端發送命令,調取windows下面的cmd窗口,將服…

python的lib文件夾_python遍歷文件夾os.path與pathlib

首先我們來一個需求,這個函數接受文件夾的名稱作為輸入參數,返回該文件夾中文件的路徑,以及其包含文件夾中文件的路徑。def print_dir_contents(sPath):import osfor sChild in os.listdir(sPath):sChildPath os.path.join(sPath,sChild)if …

python 數據字典用法_python數據字典的操作

一、什么是字典?字典是Python語言中唯一的映射類型。映射類型對象里哈希值(鍵,key)和指向的對象(值,value)是一對多的的關系,通常被認為是可變的哈希表。字典對象是可變的,它是一個容器類型,能存儲任意個數…

雙系統安裝deepin20_win10deepin15.10雙系統安裝教程

第二步:下載深度啟動盤制作工具深度啟動盤制作工具地址第三步:制作U盤啟動盤打開第二部下載的啟動盤制作工具,并準備一個u盤插入待裝系統的電腦,選擇鏡像文件后,下一步選擇磁盤并勾選格式化磁盤,點下一步開…

ubuntu19 安裝git_在Ubuntu 18.04上安裝Git

步驟1.首先,通過運行以下命令確保您的系統和apt包列表完全更新:apt-get update -yapt-get upgrade -y第2步。在Ubuntu 18.04上安裝Git。現在讓我們安裝git:apt install git您可以使用以下命令來檢查已安裝的git版本:$ git --versi…

mysql更新多條數據6_mysql語句:批量更新多條記錄的不同值

mysql更新語句很簡單,更新一條數據的某個字段,一般這樣寫:如果更新同一字段為同一個值,mysql也很簡單,修改下where即可:這里注意 ‘other_values’ 是一個逗號(,)分隔的字符串,如&am…

php mysql query 行數_如何在PHP中獲取MYSQL數據庫返回的數據的行數?

展開全部1. mysql_num_rows 可得到e69da5e887aa3231313335323631343130323136353331333337383861查詢記錄數<?php $con mysql_connect("localhost", "hello", "321");if (!$con){die(Could not connect: . mysql_error());}$db_selected …

mysql數據庫開發環境_MacOS下搭載開發環境之數據庫篇(Mysql + Navicat)

一、安裝Mysql1、官網下載mysql的tar包(提示&#xff1a;建議vpn環境下載)2、解壓并安裝tar包# 移動解壓后的二進制包到安裝目錄sudo mv mysql-5.7.19-osx10.9-x86_64 /usr/local/mysql# 更改 mysql 安裝目錄所屬用戶與用戶組cd /usr/localsudo chown -R root:wheel mysql# 初始…

mysql alter 唯一鍵_MySQL列屬性 之 唯一鍵

MySQL列屬性 之 唯一鍵唯一鍵唯一鍵&#xff1a;每張表往往有多個字段需要具有唯一性&#xff0c;數據不能重復&#xff0c;但是在每張表中&#xff0c;只能有一個主鍵&#xff0c;因此 唯一鍵就是用來解決表中多個字段需要具有唯一性的問題。例如身份證號碼應該每一行的記錄不…

如何在mysql中添加復選框_如何使用輸入和復選框更新mysql

如果我理解正確,您需要這樣做:mysql_query("UPDATE mp3SETaktif 1,baslik " . mysql_escape_string($_POST[baslik]) ."WHERE id $zuha");mysql_query("update mp3 set aktif 1,baslik $_POST[baslik]where id $_POST[id]")現在唯一的區別…

mysql 檢查列是否存在,如何檢查mysql表列是否存在?

How can I check if mysql table field even exists ?The column name is price and I need to see if it exists.Havent understood really how the EXISTS works...Any examples or ideas ?Thanks解決方案In PHP:$fields mysql_list_fields(database_name, table_name);$c…

mysql proxy yum_mysql 高可用架構 proxysql 之一 yum安裝

os:centos 7.4mysql: 5.7proxysql: 1.4.10ip 規劃如下&#xff1a;192.168.56.101 node1 (proxysql)192.168.56.102 node2 (mysql master)192.168.56.103 node3 (mysql slave)192.168.56.104 node4 (mysql slave)安裝mysql 5.7node2、node3、node4 安裝 mysql 5.7 software詳細…

wpf 使用位圖畫圖為什么斷斷續續_WPF的未來是微軟WinUi!

WPF(Windows Presentation Foundation)是微軟推出的基于Windows 的用戶界面框架&#xff0c;屬于.NET Framework 3.0的一部分。它提供了統一的編程模型、語言和框架&#xff0c;真正做到了分離界面設計人員與開發人員的工作&#xff1b;同時它提供了全新的多媒體交互用戶圖形界…

antd新增一行頁碼不正確_antd-Table@4.x對rowKey屬性的重構

時間&#xff1a;2020/04/26 &#xff0c;轉載請注明出處。寫在前面antd團隊于2020年2月發布了醞釀已久的antd4.0版本&#xff0c;對樣式的調整、部分組件邏輯的重構都進行了較大改動&#xff0c;本文針對Table的rowKey屬性重構作分析。由一個mistake帶來的思考在數據治理模塊的…

qt調用mysql調用了存儲過_Qt調用Server SQL中的存儲過程

Server SQL中的存儲過程如下&#xff1a;CREATE procedure PINSERTPCpcnum int,pcname varchar(50),pctype int,ipaddress varchar(50),port int,pcid int outputas--declare pcid intif exists (select * from COMPUTERTABLE where PcNum pcnum)set pcid -1elsebegininser…

pandas mysql index_Pandas從入門到精通(3)- Pandas多級索引MultiIndex

首先了解一下什么是多級索引&#xff0c;以及它的作用&#xff0c;為什么要有這個玩意。多級索引也稱為層次化索引(hierarchical indexing)&#xff0c;是指數據在一個軸上(行或者列)擁有多個(兩個以上)索引級別。之所以引入多級索引&#xff0c;在于它可以使用戶能以低維度形式…

tensorflow 啟動多個session_Tensorflow源碼解析7 -- TensorFlow分布式運行時

1 概述TensorFlow架構設計精巧&#xff0c;在后端運行時這一層&#xff0c;除了提供本地運行時外&#xff0c;還提供了分布式運行時。通過分布式訓練&#xff0c;在多臺機器上并行執行&#xff0c;大大提高了訓練速度。前端用戶通過session.run()啟動系統執行時&#xff0c;tar…

shell swt 樣式_SWT之路:SWT圖像顯示

簡明現代魔法 -> Java編程語言 -> SWT之路&#xff1a;SWT圖像顯示SWT之路&#xff1a;SWT圖像顯示2009-10-03程序演示還是先用SWT Desiner創建界面程序。然后創建一個Display對象和Image對象&#xff0c;和一個GC對象。類org.eclipse.swt.graphics.GC是一個封裝了所有可…

swool tcp mysql_swoole/mysql(異步)

# 異步Swoole\Mysql**(要求Workerman版本>3.3.6)**## 注意:此組件由swoole底層提供&#xff0c;由C語言編寫&#xff0c;具有超高性能。## 安裝&#xff1a;安裝有swoole擴展即可## 示例&#xff1a;phprequire_once ../Autoloader.php;use Workerman\Worker;use \Swoole\My…

xamarin和mysql_Xamarin.Android 使用 SQLiteOpenHelper 進行數據庫操作

一、前言在手機中進行網絡連接不僅是耗時也是耗電的&#xff0c;而耗電卻是致命的。所以我們就需要數據庫幫助我們存儲離線數據&#xff0c;以便在用戶未使用網絡的情況下也可以能夠使用應用的部分功能&#xff0c;而在需要網絡連接的功能上采用提示方式&#xff0c;讓用戶決定…